簡體   English   中英

有沒有一種方法可以從NodeJS觸發socket.io連接事件?

[英]Is there a way to trigger the socket.io connection event from NodeJS?

我正在嘗試在NodeJS上使用socket.io做一些事情,但我不知道如何(僅)從NodeJS觸發套接字。

到目前為止,我是通過從前端調用socket.io來使用它的,但是我想知道是否可以做與前端相同的操作,但是這次是在nodeJS部分(服務器端)執行的。

我的猜測是不可能的,因為需要一種連接(我喜歡將其稱為TCP連接,但是我不確定這是否正確),並且在連接中沒有第二個參與者的情況下,套接字將無法工作。那是我的猜測。

所以我現在正在做的是:

app.js(服務器文件)

 ...
 const ioLib = require('./path/io.js')(io);
 ...
 ...
 ...

路徑/io.js(套接字文件)

 module.exports = function(io){

 io.on('connection', async function(socket) {
 console.log('socket talks : a user connected');
 ...
 ...
 });

 module.exports.io = io;

 }

從file.ejs文件中,我做了:

var socket = io("url");

因此,我們將其稱為模式,我將執行以下操作:

當我訪問該網頁時,套接字中會觸發“連接”事件。 我的問題是,我想盡可能地簡化它:如何在沒有網頁的情況下執行同樣的操作?是否可以觸發NodeJS內的套接字?

你怎么看?

可以通過獨立的Node.js應用程序連接Socket.IO服務器(在運行位置並不重要),而不是通過Web瀏覽器訪問的Web前端。 為了實現這一點,您應該使用socket.io-client 客戶端用法示例如下:

// Node.js app: client.js
const io = require('socket.io-client');
const socket = io.connect('http://SERVER_IP:SERVER_PORT', {
    reconnect: true
});

socket.on('connect', function (socket) {
    console.log('Connected to the server!');    
});

socket.emit('connected', 'Hi from the client side!');  

在這種情況下,您的服務器端應用程序應包括以下內容:

// Node.js app: server.js
io.on('connection', function(socket) {
   console.log('socket talks: a user connected');

   // Print the message that comes from the socket client
   socket.on('connected', function (msg) {
      console.log(msg);
   });
});   

從上面可以看到,從根本上說,該體系結構與服務器-客戶端相同。 現在,讓我們更進一步,將所有這些代碼放在一個js文件中,看看它是如何工作的:

// server/client together: crazy-socketapp.js
const io_server = require('socket.io').listen(3030);
io_server.sockets.on('connection', function (socket) {
    console.log('A client is connected!');
    socket.on('connected', function (msg) {
        console.log(msg);
    });
});

const io_client = require('socket.io-client');
const socket = io_client.connect('http://localhost:3030', {
    reconnect: true
});

socket.on('connect', function (socket) {
    console.log('Connected to the server!');    
});

socket.emit('connected', 'Hi from the client side! ');

應用程序的輸出:

 > A client is connected! > Connected to the server! > Hi from the client side! 

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM