如何从ws客户端连接socket.io?

时间:2016-02-26 02:51:21

标签: javascript websocket socket.io

我有一个非常简单的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/并尝试

2 个答案:

答案 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轻松地对其进行测试和调试。连接如下图所示。

FirecampSocketIO and WebSocket的GUI客户端。

1。 SocketIO

以下屏幕的配置类似于

import io from "socket.io-client";
const socket = io( "http://localhost:3000/socket.io", 
 {
  "path": "/socketio",
  "transports": [
    "websocket"
  ]
 }
);

enter image description here

2。 WebSocket

相同的套接字端点,我们可以使用WebSocket客户端对其进行测试,如下图所示

- WS 连接 enter image description here

- WS 供稿数据 enter image description here