我有一个非常简单的socket.io聊天示例,服务器端代码是这样的:
https://github.com/js-demos/socketio-chat-demo/blob/master/index.js
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static('public'));
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
客户端使用socket io代码连接它并且运行良好:
https://github.com/js-demos/socketio-chat-demo/blob/master/public%2Findex.html
<script>
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
</script>
但我想使用其他一些websocket客户端连接服务器,比如wscat
:
npm install -g wscat
wscat ws://localhost:3000
但它无法连接,出现此错误:
error: Error: socket hang up
我的网址ws://localhost:3000
错了吗?如何使它工作?
PS:您可以看到此项目https://github.com/js-demos/socketio-chat-demo/并尝试
答案 0 :(得分:20)
从Chrome开发工具中,我找到了真正的websocket网址,它应该是:
ws://localhost:3000/socket.io/?EIO=3&transport=websocket
将此网址与wscat配合使用
答案 1 :(得分:3)
同意@freewind的回答,我想更详细地说明。
ws://localhost:3000/socket.io/?EIO=3&transport=websocket
规范可以描述为
+----------------+--------------------+
| Elm | Desc |
+----------------+--------------------+
| WS | scheme |
| localhost:3000 | host |
| socket.io | path |
| EIO=3 | EngineIO version 3 |
| transport | websocket |
+----------------+--------------------+
如果传输设置为websocket
,则可以在使用WebSocket协议升级连接时对任何WebSocket客户端进行测试。
我们可以使用Firecamp WebSocket Client轻松地对其进行测试和调试。连接如下图所示。
1。 SocketIO
以下屏幕的配置类似于
import io from "socket.io-client";
const socket = io( "http://localhost:3000/socket.io",
{
"path": "/socketio",
"transports": [
"websocket"
]
}
);
2。 WebSocket
相同的套接字端点,我们可以使用WebSocket客户端对其进行测试,如下图所示