2017-03-07 2 views
1

私は以下のWebsocketクライアントコードを持っています。私は自分のサーバーにnodeJSを使用しています。しかし、このクライアントコードを使用すると接続が閉じられます。私は何が欠けているのか分かりません。サーバーを書くためにwsやexpress frameworkを使うことは必須ですか?可能であれば、これらのフレームワークを使用せずに書きたいと思います。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などのコンテナが必要です。たぶんwebsocketの代わりにAPIを使うのが一番です。 –

+0

上記のserver.jsだけを使用すると、node.serverがノードサーバーによってオープンされたソケットに接続するにはどうすればいいですか?私はsocket.ioのようなノードパッケージを使わずにそれをやりたいと思った。 – Jake

+0

私はJavaScriptだけがポートをリッスンできないことを知っているので、アプリケーションのサーバーとして機能する。したがって、クライアントとサーバーのアプリケーションを持つという考え方では、通信とプロトコルの手段が必要です。この「サーバー」にアクセスする方法は、物理ポート(IP)によって、アプリケーションがある特定のポートで直接行われます。 Javascriptだけでは、サードパーティがそのサポート用に作成したコンテナを使用せずに接続するために、マシン上のポートを単独で開くことはできません。ソケットの考え方は、単にクライアントとサーバーを接続できることです。 –

答えて

1

なぜあなたは、任意のフレームワーク/モジュールなしでサーバーを書きたいですか?教育目的ですか?

文明、特にそれがどこに来たのかは、すでに他の人たちが何をしていたのかに基づいているからです。ホイールを意図的に改造することは決して役に立たない。

あなたのニーズに合ったモジュールを自由に使用して、世界の1つのブリックをさらに構築する新しいものを作り上げてください。

編集:私はこの答えが不満足であると感じています。答えが得られないからです。

解決策はnpm enterprise(https://www.npmjs.com/enterprise)にあると思います。これは、企業がノードモジュールを使用するために持つ可能性のある異論に対処します。これは、ノードモジュールの多様性、エンタープライズの境界内で管理されるコードの制御とセキュリティの両方の世界のベストを提供します。

+0

私の会社のサーバーの制限のためです。私はnodeJSを使用することができますが、実際にnpmを使用してパッケージをインストールすることはできません。 – Jake

+1

そして、何が理由ですか? npmのライセンス条項? (私はそれらを知らないと認めます) –

+0

npmが付いていないノードは、拡張子を持たないPHP(mysqlにも接続できませんでした)、Cはstdlibに制限されています。 Excelの代わりにcalc)。 –

関連する問題