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

Socket.io服务器未在网络外部工作

轩辕佑运
2023-03-14

嗨!!!

在这个工具的帮助下,我设法将3000端口转发。https://www.yougetsignal.com/tools/open-ports/

我之所以转发这个端口,是因为我有一个聊天应用程序,我做的它在本地主机上运行得非常好。可悲的是,当我让我的朋友打开我的web聊天应用程序(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:\n"});
            }else{
                //no commands found, throw error
                socket.emit('msg', {name: "TomatoBot", msg: "@"+users[socket.id]+"\nUnknown 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.....

因此,正如我已经说过的,连接和消息在本地主机上通过,但只要我使用外部域/IP,就什么都不起作用了!!当从外部世界直接访问mywebsite.org:3000/socket.io/socket.io.js时,连接是有效的!!

我很迷路,一定是因为我的代码中有个愚蠢的错误。

谢谢大家的帮助!!

共有1个答案

章涵蓄
2023-03-14

null

在服务器端

const http = require(`http`)
const io = require(`socket.io`)(http)

http.createServer(function (req, res) {
  // Use this server for http://mywebsite.com:81
}).listen(81)

io.on(`connection`, client => {
    // Use this socket for websocket
})

在客户端

const socket = io(`http://mywebsite.com:81`)
 类似资料:
  • Twisted Twisted 是一个事件驱动的网络引擎。他可以被用来构建多种网络协议的应用程序,包括:HTTP 服务器和客户端;使用 SMTP、POP3、IMAP 或者 SSH 协议测应用程序和 IM (即时消息)等应用 更多。 PyZMQ PyZMQ 是 ZeroMQ 的 Python 绑定。ZeroMQ 是一个高性能的异步消息库,它的一个很大的优势在于其可以被用作一个消息队列而不需要消息代理

  • 在生产环境(例如使用Docker Swarm或Kubernetes)中部署Hyperledger Composer REST服务器时,应将REST服务器配置为高度可用。这意味着你必须部署多个REST服务器实例,并且应该配置这些实例以共享数据。例如,应共享连接配置文件,区块链身份和REST API身份认证设置等数据,以便REST API客户端可以向任何实例发出请求,而无需重新进行身份认证。 业务网络

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”-> “外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。按住 Control 键并点按外部服务器对象列表的任意位置,然后选择“安装 postgres_fdw 扩展”。 外

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计

  • 我正在尝试调用一个出站的外部网络服务,即https。它在我当地的MuleStudion环境中工作正常。但是当我部署进行测试时。我收到异常 异常堆栈为: 信任Anchors参数必须为非空(java.security.Invalid算法参数异常)java.security.cert.PKIXP参数:200(null) 意外错误:java.security.Invalid算法参数异常:信任锚参数必须为非

  • 当使用uWSGI网络服务器搭配geventd的时候,Socket.IO服务器的时候,可以利用uWSGI原生的WebSocket支持。 一 个配置和运用uWSGI服务器完整的解释超出了本文的论述范围。uWSGI服务器确实是一个比较复杂的,它提供了大量而又详尽的设置选项。它必须使用 Websocket和SSL编译才能支持WebSocket传输。作为介绍,下面的命令启动了一个uWSGI服务器作为范例,这

  • 网络服务提供弹性公网IP、NAT网关、DNS解析等功能。 弹性公网IP 弹性公网IP(Elastic IP)是一种NAT IP,通过与虚拟机绑定,将弹性公网IP与虚拟机的私有地址进行NAT映射,实现虚拟机与公网之间的通信。 NAT网关 NAT网关能够为公有云VPC网络中虚拟机提供IP地址转换功能,使虚拟机可以访问外网或提供互联网服务。 DNS解析 DNS解析用于将简单好记的域名解析为计算机用于通信