【问题标题】:How to connect with Socket.io once?如何与 Socket.io 连接一次?
【发布时间】:2011-11-27 05:40:18
【问题描述】:

我正在使用 socket.io。它运作良好,但我对性能有一个简短的怀疑。我不确定我是否很好地使用了连接。

这里是我的客户端脚本(玉模板语言):

!!! 5
html
  head
    title Foo
    script(type='text/javascript', src='/javascript/socket.io.min.js')
    script(type='text/javascript')
      socket = new io.Socket('localhost', 3000);
      socket.connect();
      socket.on('message', function(data) {
      });
  body

这个脚本被加载到每个页面上(因为它是我的布局页面)。所以在每一页上,socket 都会连接到服务器socket。这是我的问题,我不喜欢这个主意。

是否可以将客户端套接字一次连接到每个客户端页面的服务器套接字?

此外,是否可以加载一次(每个客户端)/javascript/socket.io.min.js 库?

谢谢。

【问题讨论】:

  • 我想知道同样的问题,我的应用程序在主页上有这个,这个主页是网站上每个页面的包装器。所以任何页面查看/刷新都会创建一个到服务器的新套接字连接。尽管 socket.io 旨在处理大量并发连接,但我仍然觉得有更好的方法来做到这一点。 Namuol 的解决方案似乎无法说服我。有没有其他方法可以做到这一点(使用过渡页面网址)?还有人建议一种有效断开套接字的方法吗?谢谢。

标签: javascript websocket socket.io


【解决方案1】:

是否可以将客户端套接字连接到每个客户端页面的服务器套接字一次?

查看pjax,希望对你有帮助。

【讨论】:

    【解决方案2】:

    为什么不让服务器将页面数据流式传输到客户端(通过 AJAX 调用或使用您的套接字)并在用户单击链接时将内容 div 替换为页面数据?

    不使用a href="my_page",而是使用a href="#my-page",并在所有查看document.location.hasha 元素上添加点击事件侦听器,以确定用户试图访问的“页面”。您还需要在首次加载页面时查看document.location.hash,以防用户直接访问末尾带有#my_page 的URL。

    如果您希望“自然” url 的行为符合预期(例如GET /my_page),您可以让服务器在处理POST 请求时作为 AJAX 调用响应,但返回带有主 @ 的完整页面每当使用 GET 时,都会预先填充 987654332@ 内容。

    【讨论】:

    • 这不是一个好主意,因为我的网站尊重 REST 架构,我想保留漂亮的 url ;)
    • 如果您使用 AJAX,这应该仍然可以很好地发挥作用。例如,当我单击a href="#my_page" 时,onclick 处理程序可以直接用POST 访问服务器的/my_page url,其响应将替换div 内容。但是,如果您要直接访问 /my_pageGET,则可以返回已填充内容的主包装页面,因此“漂亮”的 URL 仍然可以自然地工作。
    • 顺便问一下,你用的是Node.js吗?
    • 是的,我使用的是 Node.js 和 Expressjs
    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2022-01-17
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多