Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何设置Websocket以与客户端和服务器进行通信?_Javascript_Node.js_Websocket - Fatal编程技术网

Javascript 如何设置Websocket以与客户端和服务器进行通信?

Javascript 如何设置Websocket以与客户端和服务器进行通信?,javascript,node.js,websocket,Javascript,Node.js,Websocket,我需要在浏览器和RESTAPI服务之间建立双向通信 我面临的最复杂的事情之一是每秒检查API的更新 我有两种交流方式 浏览器将数据和命令传递给API。API执行命令并返回响应 每秒检查一次API,更新用户的缓存,将缓存的缓存内容发送到浏览器 我尝试了不同的技术来处理这个问题,但没有一种效果很好,而且都无法扩展 以下是我尝试过的一些技巧 在Javascript中使用setInterval()函数每秒调用一次API 服务器发送事件(SSE) 在ShardWorker中使用setInterval()函

我需要在浏览器和RESTAPI服务之间建立双向通信

我面临的最复杂的事情之一是每秒检查API的更新

我有两种交流方式

  • 浏览器将数据和命令传递给API。API执行命令并返回响应
  • 每秒检查一次API,更新用户的缓存,将缓存的缓存内容发送到浏览器
  • 我尝试了不同的技术来处理这个问题,但没有一种效果很好,而且都无法扩展

    以下是我尝试过的一些技巧

  • 在Javascript中使用
    setInterval()
    函数每秒调用一次API
  • 服务器发送事件(SSE)
  • 在ShardWorker中使用
    setInterval()
    函数每秒调用一次API
  • 我希望我可以使用WebSocket和node.js进行这种通信


    WebSocket处理程序如何处理上述两种通信类型?

    最简单的处理方法是使用socket.io

    你可以找到文件

    基本上,在客户机上,您可以执行`socket.on('cache',function(msg){//blabla})


    在服务器中,当缓存被更新时,socket.emit('cache',msg)

    我遇到了socket.io,但请注意该技术的工作原理。我是否需要有一个nodejs服务器设置来处理API请求,以及作为中间人的websocket?如何每秒ping一次API以获取新数据?API和socket.io服务器可以共存于同一台服务器中。基本上,客户机不会每秒请求数据,而是在数据可用时作为服务器发送数据。当然,您必须知道数据何时得到更新,以便服务器可以将其发送给客户端。我仍然感到困惑。节点服务器如何知道API有新数据而不需要每秒ping一次?API是一个外部服务,我必须每秒钟检查一次,看看是否有新的事件。API是你的吗?如果是,则您可以访问数据,并准确地知道缓存中何时有新数据,以便发送数据。如果API不是你的,那么唯一的解决办法就是每分钟都向客户询问API不是我的。所以我必须每秒钟ping一次。但是我如何设置Websocket,使其每秒ping一次服务器,更新缓存“数组”,然后将数据发送到客户端。我不希望每次刷新浏览器或打开新选项卡时都打开到API的新连接