以上就是给各位分享javascript–初始加载和更新之间的SignalR,其中也会对js首次加载执行进行解释,同时本文还将给你拓展asp.netcore3.1SignalR:将复杂对象从javasc
以上就是给各位分享javascript – 初始加载和更新之间的SignalR,其中也会对js首次加载执行进行解释,同时本文还将给你拓展asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到集线器、asp.net-core-signalr – SignalR Core中的SendAsync和SendCoreAsync方法之间的区别?、asp.net-mvc – 在MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR、flash javascript之间的通讯方法小结_javascript技巧等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- javascript – 初始加载和更新之间的SignalR(js首次加载执行)
- asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到集线器
- asp.net-core-signalr – SignalR Core中的SendAsync和SendCoreAsync方法之间的区别?
- asp.net-mvc – 在MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR
- flash javascript之间的通讯方法小结_javascript技巧
javascript – 初始加载和更新之间的SignalR(js首次加载执行)
>从数据库加载初始状态
>订阅成功的消息
我一直在寻找一套最佳实践.如果我在初始加载后订阅更新,则存在丢失更新的风险.在初始加载和订阅之间可能会有更新,我会错过更新.
其次,我可以使用某种对象状态id,然后首先订阅更新流,检索数据,然后在对象落后时应用更新.这需要相当多的代码.
有没有最好的做法来处理这个问题?
解决方法
作为最佳做法,我发现废弃发送任何初始数据.相反,请尽快订阅并查询成功连接的更新.例如….
var proxy = $.connection.yourHub; $.connection.hub.start() .done(function () { // <--- immediately call once connected // define and call server hub method // this will query updates and immediately // invoke the associated client function proxy.server.queryUpdates(); }) .fail(function () { console.log('Could not connect!'); }); proxy.client.serveUpdates = function(updates) { // here's your fetched updates on initial connect }
// YourHub.cs public void QueryUpdates() { var updates = this.yourService.yourQueryUpdatesmethod(); Clients.Caller.serveUpdates(updates) // this calls proxy.client.serveUpdates }
这为您提供了建立连接,监听更新以及在连接时以一次性方式有效提供最新数据集的好处.
请注意,这不一定是SignalR特定的实现.您可以在此.done()回调中进行典型的ajax调用以检索结果,但我不明白为什么您无法重新使用集线器上已有的所有逻辑.您基本上可以通过从客户端显式调用它来调用现有的集线器方法.
asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到集线器
根据您的描述,您应该在ASP.NET Core 3.0 SignalR项目中使用Newtonsoft.Json,因为asp.net核心默认情况下不使用Newtonsoft.Json。
您应该安装Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson NuGet软件包,然后如下所示修改startp.cs ConfigureServices方法:
services.AddSignalR()
.AddNewtonsoftJsonProtocol();
更多详细信息,您可以参考此article。
asp.net-core-signalr – SignalR Core中的SendAsync和SendCoreAsync方法之间的区别?
在查看代码注释之后,两个方法在注释中都是相同的,都继承自IClientProxy,并且都接受字符串方法,对象args和取消令牌.
这些方法有什么不同?如果有的话?什么时候应该使用?
解决方法
简短的回答是:除非你真的知道你在做什么,否则应该忽略核心方法.
更多背景知识:
我们从SendAsync开始,它接受一组参数发送:
public void SendAsync(string method,object[] args); Clients.All.SendAsync("Method",new object[] { arg1,arg2,arg3 });
显然,每次都必须创建一个数组是一件痛苦的事.很容易解决的问题是使用参数:
public void SendAsync(string method,params object [] args);
Clients.All.SendAsync("Method",arg1,arg3);
但是,当您确实想要将数组作为单个参数发送时,这会分崩离析
public void SendAsync(string method,params object[] args); var arg1 = new object[] { a,b,c }; Clients.All.SendAsync("Method",arg1); // C# 'params' expands this into the below Clients.All.SendAsync("Method",a,c);
因此,我们不是发送一个数组a,c的单个参数,而是将每个参数作为单独的参数发送.这让用户感到困惑.
所以我们从中删除了params,而是生成了一大堆支持多个参数的扩展方法:
public void SendAsync(string method,object[] args); public void SendAsync(string method,object arg1) => SendAsync(method,new object[] { arg1 }); public void SendAsync(string method,object arg1,object arg2) => SendAsync(method,arg2 }); // ... etc ...
但是当你有这样的代码时,仍然存在歧义:
public void SendAsync(string method,new object[] { arg1 }); var arg = new object[] { a,c } Clients.All.SendAsync("method",arg);
同样,将选择带有object []的重载(请参阅SharpLab上的此插图).
因此,我们将一个数组重命名为SendCoreAsync:
public void SendCoreAsync(string method,object arg1) => SendCoreAsync(method,c } // No ambiguity here! Clients.All.SendAsync("method",arg);
asp.net-mvc – 在MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR
指定URL的服务器代码
app.MapSignalR("/signalr",new HubConfiguration());
如果我这样做,邮件将在哪里?当您做新的HubConfiguration时,集线器是什么?
它说我可以连接
NET client code that specifies the URL var hubConnection = new HubConnection("http://contoso.com/signalr",useDefaultUrl: false);
我会在我的Windows Server中,但是如果我在服务器上发送文本到http://myserver.com/signalr,我该如何得到它?什么中心?
还有哪里最好把它放在Windows服务中?一个很棒的例子
解决方法
在客户端(Windows服务)上:
protected override async void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); try { var hubConnection = new HubConnection("http://www.savitassa.com/signalr",useDefaultUrl: false); IHubProxy alphaProxy = hubConnection.CreateHubProxy("AlphaHub"); await hubConnection.Start(); await alphaProxy.Invoke("Hello","Message from Service"); } catch (Exception ex) { eventLog1.WriteEntry(ex.Message); } }
在服务器上:
public class AlphaHub : Hub { public void Hello(string message) { // We got the string from the Windows Service // using SignalR. Now need to send to the clients Clients.All.addNewMessagetoPage(message); // Send message to Windows Service }
flash javascript之间的通讯方法小结_javascript技巧
不用getURL和fsCommand方法flash使用的actionscript跟javascript是非常相通的,下面描述如何互相调用函数:
1:javascript调用flash中的函数
在flash的脚本中增加
import flash.external.ExternalInterface;
假定要调用的函数是hello,as代码如下
function hello(){
return "hello";
}
ExternalInterface.addCallback("hello", this, hello);
//第一个参数为导出函数名,第三个参数为as的函数名,这样就可以在js中调用as的hello函数了
2:flash调用js的函数
ExternalInterface.call("hello2", "jacky");
//第一个参数是js的函数名,后面的是js函数的参数
3:如何互相调用
html代码如下:
javascript代码如下:
function callFromFlash() {
var a=thisMovie("test").hello();
alert(a);
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
//注意,不能使用document.getElementById此类函数取得网页中的flash对象,只能使用thisMovie函数中的代码
国外看到的另一种方法:
You can''t call a function, but you can change/set a variable and use the watch() method to execute the code whenever the value is changed.
ActionScript Code:
function changeType(prop, oldval, newval) {
//do your stuff
return newval;
}
var strType = "";
this.watch("strType", changeType);
今天的关于javascript – 初始加载和更新之间的SignalR和js首次加载执行的分享已经结束,谢谢您的关注,如果想了解更多关于asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到集线器、asp.net-core-signalr – SignalR Core中的SendAsync和SendCoreAsync方法之间的区别?、asp.net-mvc – 在MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR、flash javascript之间的通讯方法小结_javascript技巧的相关知识,请在本站进行查询。
本文标签: