【问题标题】:How to connect with socket.io from a ws client?如何从 ws 客户端连接 socket.io?
【发布时间】:2016-06-09 03:01:25
【问题描述】:

我有一个很简单的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/试试看

【问题讨论】:

    标签: javascript websocket socket.io


    【解决方案1】:

    从Chrome Dev Tools中,我找到了真正的websocket url,应该是:

    ws://localhost:3000/socket.io/?EIO=3&transport=websocket
    

    将此网址与 wscat 一起使用效果很好

    【讨论】:

    • 这对我有用。你是怎么发现这个的/ws://localhost:3000 不起作用有什么原因吗?
    【解决方案2】:

    同意@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"
      ]
     }
    );
    

    2。 WebSocket

    同一个socket端点,我们可以用WebSocket客户端进行测试,如下图所示

    - WS 连接

    - WS 提要数据

    【讨论】:

    • 在 Elastic Beanstalk 上将其部署到生产环境后,我将如何执行此操作?我用我的服务器 IP 替换了 localhost 但我没有得到任何回报,但是当我在 localhost 上时它可以工作。 @nishchit-dhanani
    • @NathanielBabalola 这很奇怪。你想加入 Discord 服务器吗?我们将在那里深入讨论。乍一看,这可能是一个 CORS 问题。 discord.gg/8hRaqhK
    • 好的,刚刚给你发了消息@nishchit-dhanani
    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2019-01-19
    • 2016-03-01
    相关资源
    最近更新 更多