当前位置: 首页 > 知识库问答 >
问题:

NodeJS Websocket (ws) Callback

武嘉祥
2023-03-14

我使用的是“ws”NodeJS网络套接字库。之前我在试用插座。io;带插座。io我可以像这样在客户端和服务器之间实现回调:

socket.emit('Data', data, function(data){
       console.log(data);
});

socket.on('Data', function(data, callback){
       callback('it worked');
});

我试图使用ws库做同样的事情,但没有任何成功。有可能吗,如果有可能,怎么做?

共有2个答案

景承教
2023-03-14

这可以像这样使用WebSockets-Callback来完成

wscb.send({cmd: 'Hello server!'},
    function(response){
        //do something...
    }
)
诸超
2023-03-14

API非常相似,您可以做几乎相同的事情。

例如,在服务器端而不是:

s.emit('message', 'message from server');

您使用:

s.send('message from server', ()=>{});

要在客户端接收,而不是:

s.on('message', function (m) {
  // ...
});

您使用:

s.addEventListener('message', function (m) {
  // ...
});

诸如此类。

在这个回答中,我展示了示例代码(前端和后端)来演示Socket.io和WebSocket之间的区别:

  • 插座之间的差异。io和websockets

以下是服务器代码示例:

var path = require('path');
var app = require('express')();
var ws = require('express-ws')(app);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'ws.html'));
});
app.ws('/', (s, req) => {
  console.error('websocket connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
});
app.listen(3001, () => console.error('listening on http://localhost:3001/'));
console.error('websocket example');

浏览器代码示例:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening websocket connection');
var s = new WebSocket('ws://'+window.location.host+'/');
s.addEventListener('error', function (m) { log("error"); });
s.addEventListener('open', function (m) { log("websocket connection open"); });
s.addEventListener('message', function (m) { log(m.data); });

有关详细信息,请参阅此处。

 类似资料:
  • ws-http 是一个简单轻量的HTTP 客户端工具库。可用于 HTTP API 测试,支持 ssl,basic auth,代理,自定义请求头,以及常用HTTP 请求方法。 $httpRequest = \Ws\Http\Request::create();$httpResponse = $httpRequest->get("https://api.github.com");$watcher = 

  • 实现基于Websocket 协议的 PHP类库 和 javascript类库 , 实现事件+回调函数的架构开发,以一个简单聊天室实例介绍其使用方法: 不同浏览器,不同电脑,不同地域, 实时通讯。实现的详细 请研究源码。 /***服务端****/ /**  * 实例化  */ $io = new SocketIO('127.0.0.1',8000); /**  * 监听连接  */ $io->on(

  • Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client. Use Server-sent events (SSE) instead? Check out graphql-sse! Getting started Install yarn add grap

  • WS-Policy 定义了一个简单 XML 结构,由 4 个不同元素和一对属性组成。根据 WS-Policy 解释,这些元素和属性提供一种方法来组织和合并任意复杂度的策略断言(policy assertions)。为了定义构成策略的真实断言,您需要使用特定扩展,比如 WS-SecurityPolicy,而不是 WS-Policy 本身。 为了方便起见,WS-Policy 定义了一个标准形式的策略表

  • JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要

  • 问题内容: 我构建了一个最小的Web服务,并使用javax.xml.ws.Endpoint发布了它。如果我尝试获得WSDL, 它就可以正常工作。 尝试在接收它,我什么也没收到。该地址与本地主机相同。 是否可以在不提供地址的情况下发布网络服务? 将代码更改为 在IP地址上获取wsdl,但不在本地主机上获取。 是否没有可能仅定义端口? 问题答案: 您可以尝试在0.0.0.0上发布它吗?