如何通过SignalR将javascript对象从一个客户端发送到另一个客户端

时间:2015-08-13 13:04:33

标签: javascript c# jquery model-view-controller signalr

我正在开发一个Javascript多人游戏,我需要使用signalR将Javascript对象从一个客户端发送到另一个客户端。直到现在我通过字符串或数组将客户端发送到客户端数据 但我不知道如何在服务器中接收Javascript对象以将该对象发送到另一个客户端。

var MyInfo = {
    UserName: loginUserName,
    userid: logInUserId,
    getinfo: function() {
        return this.UserName + ' ' + this.userid;
    }
}

我应该使用哪种数据类型来接收集线器中的Javascript数据 我正在使用C#.NET MVC。

2 个答案:

答案 0 :(得分:2)

我得到了问题的答案...... C#语言提供自动将Javascript对象转换为Object数据类型。因此,我将Javascript对象发送到服务器,然后以Object数据类型接收该对象。之后,我将该对象发送到目标客户端,如下所示:

var MyInfo = {
    UserName: loginUserName,
    userid: logInUserId,
    getinfo: function() {
        return this.UserName + ' ' + this.userid;
    }
};

var MyInfo2 = {
    UserName: "",
    userid: "",
    getinfo: function() {
        return this.UserName + ' ' + this.userid;
    }
};

var chessR = $.connection.gameHub;
var myConnectionID;
chessR.client.testObject = function(temp) {
    MyInfo2.UserName = temp.UserName;
    MyInfo2.userid = temp.userid;
    alert(MyInfo2.getinfo());
}
$.connection.hub.start().done(function() {
    chessR.server.testObject(MyInfo);
});

在signalR hub上写道:

public class GameHub : Hub
{
    public void testObject(Object MyInfo)
    {
        Clients.Caller.testObject(MyInfo);
    }
}

现在问题解决了。

答案 1 :(得分:1)

我认为最简单的方法是在服务器端创建一个包含JS模型相同属性的MyInfoModel,并将其传递给服务器方法。

通常,SignalR和ASP.NET应该处理数据的序列化,让您发送和接收复杂的对象。 (请注意,我没有测试过,这只是一个有根据的猜测)。由于您可以轻松地将复杂对象从服务器发送到客户端,因此我认为没有理由不能将它们从客户端发送到服务器。

如果第一种方法(在服务器上创建模型并使服务器方法接受模型)不起作用,您可以序列化对象,将其作为字符串发送并在集线器上反序列化(您仍然需要模型反序列化。)

如果这些都不起作用,请留言,当我到达带有VS的电脑时,我会测试它们并分享结果。

希望这有帮助!祝你好运!