首页 新闻 会员 周边 捐助

WebSocket与消息推送

0
悬赏园豆:20 [已解决问题] 解决于 2017-04-17 16:38

网上都看到websocket是客户端发消息给服务器,服务器根据客户端的消息反馈。

怎么能做到服务器主动发消息给客户端?fleck和superwebsocket好像都没有主动推的例子,websocket能实现吗?

清海扬波的主页 清海扬波 | 小虾三级 | 园豆:825
提问于:2017-04-13 13:31
< >
分享
最佳答案
0

websocket 必须能实现啊

收获园豆:20
czd890 | 专家六级 |园豆:14482 | 2017-04-13 13:40

这是fleck的代码,其他的也是类似的。怎么主动推呢。

var server = new WebSocketServer("ws://127.0.0.1:8181");
        server.Start(socket =>
        {
            socket.OnOpen = () => Console.WriteLine("Open!");
            socket.OnClose = () => Console.WriteLine("Close!");
            socket.OnMessage = message => socket.Send("123");
        });

清海扬波 | 园豆:825 (小虾三级) | 2017-04-13 14:09

@清海扬波: 

http://www.cnblogs.com/dacong/p/6380049.html

 

socket.OnOpen = () =>
{
Console.WriteLine("Open!");
allSockets.Add(socket);
};

 

foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}

czd890 | 园豆:14482 (专家六级) | 2017-04-13 17:34

@calvinK: 谢谢,刚学习websocket,还是自己思路有问题.再问一下,如果我要知道每个连接具体是哪个客户端(张三还是李四),在建立连接的时候,怎么发给服务器,服务器又怎么接收?

清海扬波 | 园豆:825 (小虾三级) | 2017-04-13 18:08

@清海扬波: 

能看懂了

allSockets.Add({socket:socket,userid:currentUserId});

czd890 | 园豆:14482 (专家六级) | 2017-04-13 20:56

@calvinK: 客户端怎么把currentUserId传给服务器,服务器又怎么接收?我看网上的办法是客户端这样建立

ws = new WebSocket("ws://localhost:8181?uid=001")

fleck在服务器端,socket.ConnectionInfo.Path这样能看到“/?uid=001” 是这样的信息,然后拆分。

清海扬波 | 园豆:825 (小虾三级) | 2017-04-14 09:12

@清海扬波: 这样也是可以的

czd890 | 园豆:14482 (专家六级) | 2017-04-14 10:31

@calvinK: 有没有其他方法,参数能用参数名直接取,Request["uid"]这样?

清海扬波 | 园豆:825 (小虾三级) | 2017-04-14 10:34

@清海扬波:  this.user.identity.username 。当前用户

czd890 | 园豆:14482 (专家六级) | 2017-04-14 17:54
其他回答(2)
0

SignalR 

吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-13 14:07
0


基于 AJAX 的长轮询(long-polling)
HTTP Streaming
TCP 长连接
WebSocket
这些都可以实现服务器主动发送数据至网页端

ycyzharry | 园豆:25683 (高人七级) | 2017-04-13 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册