socket.io服务器不在网络外部工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket.io服务器不在网络外部工作相关的知识,希望对你有一定的参考价值。

Heello !!!

[借助此工具,我成功地将端口转发为端口3000。https://www.yougetsignal.com/tools/open-ports/

之所以转发此端口,是因为我有一个聊天应用程序,可以在localhost上很好地工作。可悲的是,当要求我的朋友打开我的网络聊天应用程序(http://mywebsite.com:81/chat/)时,javascript内容无法通过端口3000连接到我的服务器...

'这是我的一些代码:

server.js

const io = require('socket.io')(3000)

const users = {}

io.on('connection', socket => {
    // On message receive
    socket.on('msg', message => {
        //broadcast message
        socket.broadcast.emit('msg', {name: users[socket.id], msg: message});

        // If message starts with "/" AKA is a command
        if(message.startsWith("/")){
            message=message.split(" ");
            //message[0]= /help

            if(message[0] == "/say"){
                txt=message.splice(1).join(" "); // GET TEXT AFTER /help
                socket.emit('msg', {name: "TomatoBot", msg: txt});
            }else if(message[0] == "/help"){
                txt=message.splice(1).join(" "); // GET TEXT AFTER /help
                socket.emit('msg', {name: "TomatoBot", msg: "help dialog"});
            }else if(message[0] == "/list"){
                socket.emit('msg', {name: "TomatoBot", msg: users[socket.id]+" connected users:
"});
            }else{
                //no commands found, throw error
                socket.emit('msg', {name: "TomatoBot", msg: "@"+users[socket.id]+"
Unknown command: "+message[0]+". Type /help for a list of commands."});
            }
        }
    })

    // On user join
    socket.on('new', name => {
        users[socket.id] = name;
        socket.broadcast.emit('new', name);
    })

    // On user disconnect
    socket.on('disconnect', () => {
        socket.broadcast.emit('bye', users[socket.id]);
        delete users[socket.id];
    })
})

script.js(我的客户端脚本)

const socket = io(':3000'); // go from localhost:81 to localhost:3000!!
const form = document.getElementById('form');
const input = document.getElementById('input');
const msgbox = document.getElementById('msgbox');

const name = prompt('name?');
socket.emit('new', name);
appendMessage(name+' joined');
// etc etc.....

因此,正如我已经说过的那样,连接和消息在localhost上已通过,但是一旦我使用外部域/ IP,就不再起作用了!!从外部直接访问mywebsite.org:3000/socket.io/socket.io.js时,连接有效!

我在这里很迷路,这一定是由于我的代码中出现了一些愚蠢的错误。

感谢大家的帮助!

答案

您不需要使用除HTTP服务器所用端口以外的其他端口。

以上是关于socket.io服务器不在网络外部工作的主要内容,如果未能解决你的问题,请参考以下文章

Gottox socket.io-java-client“握手时出错引起:java.io.FileNotFoundException:http://192.168.1.69:8080 / socket

socket.io 示例:不工作

Angular 6 和 Socket.IO - Socket.On 不工作

socket io 的 emit 函数是如何工作的?

Socket.io 在 localhost 上工作,但在部署 heroku 后无法工作?

node.js 上的 Socket.io-client 只工作一次