网上都看到websocket是客户端发消息给服务器,服务器根据客户端的消息反馈。
怎么能做到服务器主动发消息给客户端?fleck和superwebsocket好像都没有主动推的例子,websocket能实现吗?
websocket 必须能实现啊
这是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");
});
@清海扬波:
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);
}
@calvinK: 谢谢,刚学习websocket,还是自己思路有问题.再问一下,如果我要知道每个连接具体是哪个客户端(张三还是李四),在建立连接的时候,怎么发给服务器,服务器又怎么接收?
@清海扬波:
能看懂了
allSockets.Add({socket:socket,userid:currentUserId});
@calvinK: 客户端怎么把currentUserId传给服务器,服务器又怎么接收?我看网上的办法是客户端这样建立
ws = new WebSocket("ws://localhost:8181?uid=001")
fleck在服务器端,socket.ConnectionInfo.Path这样能看到“/?uid=001” 是这样的信息,然后拆分。
@清海扬波: 这样也是可以的
@calvinK: 有没有其他方法,参数能用参数名直接取,Request["uid"]这样?
@清海扬波: this.user.identity.username 。当前用户
SignalR
基于 AJAX 的长轮询(long-polling)
HTTP Streaming
TCP 长连接
WebSocket
这些都可以实现服务器主动发送数据至网页端