websocket-sharp如何使用socketio服务器并发送“emit”请求

时间:2017-01-29 10:59:30

标签: c# websocket socket.io websocket-sharp

我可以连接到我的socketio服务器,但是如何发送带有params的请求?

我的socketio服务器监听事件

socket.on('init', ( data ) => {
    console.log('init', data);
});

在客户端我尝试这样做

 _socket.OnMessage += (sender, e) =>
{
    Console.WriteLine("message: {0} {1}", e.IsBinary, e.Data);
    _socket.Send(MakePacket("init", new Init
        {
            key = "1",
            room = "eq",
            type = "s"
        }.ToJson())
    );
};

private string MakePacket(string e, string data)
{
    return new[] {e, data}.ToJson();
}

所以我将json发送到服务器 [“init”,{“type”:“s”,“key”:“1”,“room”:“eq”}]

但服务器不会对此数据包做出反应。服务器工作正常,我只有在C#调用此事件时才有问题。我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题在于socket.io不是普通的websocket,而是在websocket之上的自定义协议(或者在HTTP长轮询之上作为回退和初始化)。这意味着要与socket.io服务器说话,你必须像socket.io那样编码你的数据和消息。 Here似乎是关于它是如何工作的一些文档。

备选方案:

  • 在客户端使用socket.io库 - 但我不知道是否存在
  • 使用服务器端的原始websockets

答案 1 :(得分:2)

C#有socketio库,但我有一些问题,我找不到答案,根本没有支持。所以我切换到websocket-sharp。

从socketio服务器调查信息的一些研究我找到了答案。如果我发送此字符串一切正常

x

只需在json之前添加42,一切都会正常工作。魔法。 我认为这个42号码就像你当前的连接状态或类似的东西。因为当你刚刚连接到socketio服务器时,它会在json之前发送带有0的字符串。