如何在两个不同的接口之间建立一个socket.io连接?

时间:2019-08-29 09:40:45

标签: javascript node.js socket.io

我实际上正在尝试在两个不同的应用程序之间建立实时连接。我找到了很多关于如何使用socket.io进行聊天的教程,但这并没有真正的帮助,因为它是同一应用程序在多个窗口中重复的。

我正在为本地开发中的英雄联盟制作一个选配禁令。我的第一个想法是一方面显示空的叠加层,另一方面创建一个界面手动对其进行更新。在我的情况下,Socket.io似乎是正确的选择,因为它可以提供新数据而不必重新加载组件。

这是我在两个应用程序中写的:

const express = require('express');
const socket = require('socket.io');

// App setup
const app = express();
const server = app.listen(4200, function () {
    console.log('Listening to requests on port 4200')
});

// Static files
app.use(express.static('public'));

// Socket setup
const io = socket(server);

io.on('connection', function (socket) {
    console.log('Made socket connection', socket.id);

    socket.on('change', function (data) {
        io.sockets.emit('change', data);
    });
});

但是我无法连接它们,因为它们必须监听相同的端口。我究竟做错了什么? (请原谅我的英语不好和缺乏语法,我在这里尽力而为。:p)

2 个答案:

答案 0 :(得分:1)

我当然不是网络编程专家,但是据我所知,您需要有一个监听应用程序(后端)和另一个要连接的应用程序(客户端)。然后,您定义后端接收的所有数据(消息)会发生什么(例如,将接收到的消息发送到同一聊天室中的所有客户端)。

如果我正确地假设您正在尝试连接两个监听应用程序?

对“ nodejs套接字服务器客户端示例”的简单google搜索显示,此https://www.dev2qa.com/node-js-tcp-socket-client-server-example/可能希望朝这个方向进行研究

答案 1 :(得分:1)

u可以尝试这种方式

var express = require('express');
var socket  = require('socket.io');

// App setup
var app = express();

var server = app.listen(8080, () => {
   console.log('App started')
})

// Static file
app.use(express.static('public'))

// Socket SetUp
var io = socket(server);

io.on('connection', socket => {
    console.log('made the connection')

    socket.on('chat',data => {
       io.sockets.emit('chat',data)
    });

    socket.on('typing',data => {
        socket.broadcast.emit('typing',data);
    });
})

创建另一个文件并

var socket = io.connect('http://localhost:8080')

// Elenment
var message  = document.getElementById('message');
    handle   = document.getElementById('handle');
    btn      = document.getElementById('send');
    output   = document.getElementById('output');
    feedback = document.getElementById('feedback');
// Emit Events

btn.addEventListener('click', () => {
   socket.emit('chat', {
      message: message.value,
      handle: handle.value
   })
})

message.addEventListener('keypress', () => {
   socket.emit('typing', handle.value)    
})

socket.on('chat',data => {
   feedback.innerHTML = '';
   output.innerHTML += '<p><strong>' + data.handle +': </strong>' + 
  data.message + '</p>'
 })

socket.on('typing', data => {
  feedback.innerHTML = '<p><emp>' + data + ' is typing a message... </emp></p>'
})

详细信息在此node socket chat app