这可能吗?有人试过吗?
使用websockets意味着没有httpheaders被交换(就像在Ajax请求),所以在页面显示的速度肯定有一个提升,但是与套接字你持有连接到服务器,即使什么都没有发生,这是有害的,因为用户数量增加?
在客户端和服务器之间保持连接的情况下,服务器还能处理在同一端口上连接的其他客户端吗?这绝对是可能的,但我还没有尝试过。您将获得延迟提升,但带宽提升并不显著。真正的问题不在于服务器资源(通过AJAX持续轮询服务器在大多数情况下可能对服务器来说更困难),而是AJAX确实解决了许多问题(特别是随着范围的增加而遇到的问题),因此您将重新构建许多自定义使用的东西。
除非您真的遇到延迟问题,否则我建议使用标准AJAX。或者只在你的应用程序中需要低延迟的部分使用WebSockets,这样你就不用重新创建所有的轮子了。
是的,能够让多个客户端同时连接到一个侦听端口是可能的,并且一直在做(例如,您的web服务器几乎肯定在端口80上这样做)。你的WebSocket服务器必须正确处理传入的连接(事件,线程,或多进程),但它是相当标准的公平(谷歌"socket programming YOUR_LANGUAGE")。
仅使用websockets (via socket)构建整个站点。io和node.js,没有Ajax)?这可能吗?有人试过吗?
我没有听说过这样的事情,但是有很多网站密集地使用Ajax。
首先,并不是所有的浏览器都支持本地websockets,只有少数浏览器支持,所以你的大多数用户可能不得不做一些长池或类似的事情。使用websockets意味着没有http头被交换(如在Ajax请求中),所以页面速度肯定会有提升显示,但是与您持有连接到的套接字服务器,即使什么都没有发生,这是有害的用户数量增加?
如果在客户端和服务器之间保持连接,则可以关闭服务器仍然处理在同一端口上连接的其他客户端吗?
你是对的,但我想如果你使用的是Node.js之类的东西,没有成千上万的用户连接,这不会是一个问题。
看一下SocketStream:https://github.com/socketstream/socketstream
SocketStream是一个新的Node.js web框架,致力于创建单页实时网站。
会有一些初始的资源加载,但WebSockets将广泛用于客户端<>服务器通信。
迟来的答复,但是…
我最近推出了我的娱乐网络应用程序(jouce .space),它使用websocket进行所有操作,除了身份验证。websocket既用于服务器推送的数据,也用于客户端发起的事务。
该网站提供几种不同的台球类型的娱乐。玩家不用球杆,而是用一根橡皮筋把鼠标和球连在一起来控制球。不像台球或台球,你连续地玩:你不轮流。
弹性带解决(或最小化)延迟问题,因为玩家在通过弹性带进行控制时自然会期望延迟。服务器运行游戏模型,每隔40毫秒通过websocket发送更新的球位置和游戏事件。每个客户端机器都以当前鼠标位置响应。
除了传送实时游戏数据,套接字还发送/接收玩家到达&离职、游戏公告和聊天。数据是JSON格式的,例如,每40毫秒发送到每个客户端:
{
"frameN": frame_sequence_num,
"cpuLoad": frame_update_us/frameRate,
"players":{
<playerId>:[posX, posY, MouseX, MouseY],
.
.
.
}
}
有时候帧数据到达的顺序是乱的,所以如果frame_sequence_num小于前一个,那么该帧数据将被忽略。将每个人的鼠标位置发送给所有玩家,让每个人都能看到彼此的橡皮筋。
颠簸。在这篇文章中,太空是实时的。访问和"查看源代码"以更深入地了解客户端。呃,警告一下,代码还不是很漂亮;这是一个广告噱头的大杂烩,但它运行良好(除了MSIE)。该服务器是用golang编写的,托管于openshift.redhat.com。