2017-02-07 125 views
3

是否可以通過發送socket.io消息到我的本地主機服務器(節點)使用命令行在Linux?我不知道這是可能的或不...從稀缺谷歌的結果,我猜這是不可能的或複雜的...如何從linux的命令行向我的socket.io websocket發送消息?

我socket.io代碼如下所示:

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

socket = io.listen(server, {log: false}); 
server.listen(8081); 

socket.sockets.on('connection', function (socket) { 
    socket.on('message', function (data) 
    { 
    console.log("Received socket message from GUI: "+data); 
    } 
}); 

我想發送一個socket.io消息,如下所示:"testControl,loadModels,start"然後觸發一些服務器端邏輯。這可能嗎?

我碰到websocketd這似乎是有前途的,但它創建在Linux上的WebSocket,我只是想發送消息給現有的WebSocket。

版本信息:

  • 節點版本:v0.10.42
  • Socket.IO版本:1.3.4
  • 快遞版本:4.12.0

回答

4

我能通過執行以下操作來解決此問題:

  1. 在你的服務器使用curl

    curl --noproxy localhost, 
        -X POST 
        --data "data=testControl,loadModels,start," 
        http://localhost:8081/sendSocketMessage 
    
6

你可以寫一個簡單的客戶端這樣的(我們將其命名爲client不帶擴展名)創建一個新的端點

app.post('/sendSocketMessage', function(req, res){ 
    console.log("Request is "+JSON.stringify(req.body)); 
    socketManager.parse(req.body); //send message directly to your socket parser 
    res.status(200).send("OK"); 
}); 
  • 發送數據:

    #!/usr/bin/env node 
    const socket = require('socket.io-client')('http://localhost:3000'); 
    const someDelay = 10; 
    socket.on('connect', function() { 
        console.log('connected...'); 
        if (process.argv[2] && process.argv[3]) { 
         console.log('sending ' + process.argv[2] + ': ' + process.argv[3]); 
         socket.emit(process.argv[2], process.argv[3]); 
         setTimeout(() => { 
          process.exit(0); 
         }, someDelay); 
        } else { 
         console.log('usage: ./client.js <event> <data>'); 
         process.exit(1); 
        } 
    }); 
    

    帶一個非常基本的package.json

    { 
        "name": "client", 
        "version": "0.0.1", 
        "private": true, 
        "scripts": { 
        "start": "client" 
        }, 
        "dependencies": { 
        "socket.io-client": "^1.4.6" 
        } 
    } 
    

    然後運行npm install,給client權限執行,您可以用(例如)./client message testControl

    你覺得運行呢? ;)

  • +0

    酷!是的,這是另一個好方法。只需創建一個可以將消息發送到我的套接字的小節點服務器!謝謝! – Kayvar

    +0

    使用'socket.send'而不是'socket.emit'解決了我有一個問題 – Kayvar

    相關問題