2017-03-07 62 views
1

我有以下Websocket客戶端代碼。我正在爲我的服務器使用nodeJS。但是當我使用這個客戶端代碼時,我關閉了連接。我不知道我錯過了什麼。使用ws或express框架來編寫服務器是強制性的嗎?如果可能的話,我想寫一個不使用這些框架。Websockets - 如何在沒有任何節點框架的情況下編寫服務器

// Let us open a web socket 
       var ws = new WebSocket("ws://server.domain.com:8080/pa"); 

       ws.onopen = function() 
       { 
        // Web Socket is connected, send data using send() 
        ws.send("Message to send"); 
        alert("Message is sent..."); 
       }; 

       ws.onmessage = function (evt) 
       { 
        var received_msg = evt.data; 
        alert("Message is received..."); 
       }; 

       ws.onclose = function() 
       { 
        // websocket is closed. 
        alert("Connection is closed..."); 
       }; 

Server.js

var http = require('http'); 

http.createServer(function(request, response) { 
    request.on('error', function(err) { 
    console.error(err); 
    response.statusCode = 400; 
    response.end(); 
    }); 
    response.on('error', function(err) { 
    console.error(err); 
    }); 

    response.writeHead(200, {'Content-Type': 'application/json'}); 
    var body=[]; 
    if (request.method === 'GET' && request.url === '/pa') { 
    response.end(JSON.stringify({"action": "pa"})); 
    } 
    else if (request.method === 'GET' && request.url === '/pi') { 
    response.end(JSON.stringify({"action": "pi"})); 
    } 
    else { 
    response.statusCode = 404; 
    response.end(); 
    } 
}).listen(8080); 
+0

我相信通過javascript你將無法在服務器上打開一個端口來保持你的套接字處於活動狀態並接收請求,所以你需要一個像node.js或其他的容器來執行這些操作。也許最好是使用API​​而不是websocket。 –

+0

所以如果我只使用上面的server.js,我該如何編寫我的client.js來連接到由節點服務器打開的套接字?我想這樣做,而不使用任何節點包如socket.io – Jake

+0

因此,我知道只有JavaScript不能監聽端口,作爲您的應用程序的服務器。因此,擁有客戶端和服務器應用程序的想法需要一種通信和協議,訪問此「服務器」的方式直接取決於其物理地址(IP),位於某個端口,即應用程序所在的位置。單獨使用Javascript無法在您的機器上打開端口供第三方連接到它,而無需使用用於支持的容器。套接字的想法是能夠將客戶端連接到服務器。 –

回答

1

爲什麼你想編寫一個服務器,而無需任何框架/模塊?是否用於教育目的?

文明和特別是IT到達了它的位置,因爲我們可以建立在別人已經做過的事情上。故意重新發明輪子永遠不會有用。

因此,請隨意使用適合您需求的模塊,並在它們的基礎上創建新的東西,進一步構建世界一塊磚。

編輯:我覺得這個答案不能令人滿意,因爲它沒有提供答案。

我認爲解決方案在於npm企業(https://www.npmjs.com/enterprise)。這解決了企業可能使用節點模塊的異議。它爲您提供兩全其美的優勢:節點模塊多樣性的力量,以及在企業邊界內管理的代碼的控制和安全性。

+0

這是因爲我的公司服務器的限制。我可以使用nodeJS,但不能真正安裝包使用npm install – Jake

+1

而原因是什麼? npm的許可條款? (我承認我甚至不知道它們)。 –

+0

沒有npm的節點就像php沒有任何擴展(你甚至不能連接到mysql),或者C限於stdlib,或沒有安裝任何軟件的Windows(記事本代替Word和而不是Excel)。 –

相關問題