2016-12-16 8 views
0

私はsocket.ioを使用してnode.jsサーバーを作成したいと思っていますが、私は初心者の方です。私はexpressとapp.jsの使い方を学ぶべきだが、http、js、socket.ioのパッケージだけでnode.jsの能力に達したら、それを行う予定です。私は約1時間オンラインで見て、私の問題を助けるものは何も持っていません。私がsocket.ioに持っている主な問題は、クライアント側では、関数io();動かない。私はbodyタグの上のスクリプトリンクのパスをサーバプロジェクトのディレクトリにあるファイルにリダイレクトしようとしましたが、require();というエラーが返されました。関数ではありません。私はこのテキストの壁の下で、私が使用しているファイルのいくつかを含んでいます(しかしそれらすべてではありません)。これが間違って書式設定されている場合、または間違っている場合は、私が最初にスタック交換を使用して質問するので、私を許してください。このため、ここに従うフォーマットに適したものにするためにこれを編集する十分な評判があれば、してください。Socket.ioはnode.jsを使っていません。

まず、私のサーバーファイル:

const http = require('http'); 
const fs = require('fs'); 
const io = require('socket.io')(http); 

function socketReq(soc){ 
    soc.emit("test", {"user":"test", "text":"testing da socket"}); 
} 

io.on("connection", socketReq); 

function server(req,res){ 
    console.log('A user tried to connect to mazeserver.localtunnel.me'+req.url) 
    if(req.url == '/'){ 
     console.log('Sending html...'); 
     res.writeHead(200, {"Context-Type":"text/html"}); 
     fs.createReadStream('./index.html').pipe(res); 
    }else if(req.url == '/pong.js'){ 
     console.log('Sending JS...'); 
     res.writeHead(200, {"Context-Type":"text/JavaScript"}); 
     fs.createReadStream('./pong.js').pipe(res); 
    }else { 
     console.log('Error 404: file .'+req.url+' not found'); 
     res.writeHead(404, {"Context-Type":"text/html"}); 
     fs.createReadStream('./404.html').pipe(res); 
    } 
} 

http.createServer(server).listen(1337); 
console.log('Server created'); 

そして今、私のメインのhtmlファイル:

<html id='html'> 
    <head> 
     <title>Maze server</title> 
     <center> 
     <hr><br> 
     <h1>Welcome to my test server!</h1> 
     <br><hr> 
     <p>This is some text to test</p> 
     </center> 
     <script type='text/JavaScript'> 
      document.getElementById('html').style.hide = "true"; 
      document.onload = function(){ 
       document.getElementById('html').style.hide = "false"; 
      } 
      var clicks = 0; 
      function clickButton(){ 
       clicks++; 
       document.getElementById('clicks').innerHTML = clicks; 
      } 
     </script> 
    </head> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     var socket = io(); 
    </script> 
    <body> 
     <center> 
     <button onClick='clickButton();'>Im a button</button> 
     <p>You've clicked me <span id='clicks'>0</span> times. Ouch!</p> 
     <br><hr> 
     <p>Test canvas:</p> 
     <canvas id='canvas' width='400' height='200'></canvas> 
     <script src='pong.js' type='text/JavaScript'></script> 
     <br> 
     <br> 
     <button onClick='bounce();'>Bounce!</button> 
     <br> 
     <button onClick='speed("x");'>Speed up X</button> 
     <button onClick='speed("y");'>Speed up Y</button> 
     <br> 
     <button onClick='speed("x"); speed("y");'>Speed up both</button> 
     <br> 
     <button onClick='resetXY();'>Reset</button> 
     <br><hr> 
     </center> 
     <p>"Copyrite" <strong><blink type='EasterEgg' mazeiness='true'>MazeOfEncryption</blink></strong> 2048. Because why the heck not.</p> 
    </body> 
</html> 

以上のファイルが必要な場合は、私は私が、含めるべきファイルを教えてくださいは、問題がこの2つのファイルのいずれかにあるとします。事前のおかげで、

-Maze

+0

あなたは方法を見つけるためにsocket.io仕様に見ることができます。 'express 'にアタッチすると、いくつかのハンドシェイクPOSTとGETリクエストを処理するためのルートが追加されるためです。 –

+0

基本的には、明示せずに正しく動作させるためにいくつかのものを追加する必要がありますか?より具体的になりますか? – Programah

+0

ここのsocket.io docの中にあります:http://socket.io/docs/#using-with-node-http-server。プレーンなhttpサーバと明示されていないSocket.io。または独自のWebサーバーを作成しなくても:http://socket.io/docs/#using-it-just-as-a-cross-browser-websocket(socket.ioは自分自身を作成し​​ます)。参考までに、socket.io以外のURLを処理する必要がある場合、Expressは実際にはそれほど簡単ではありません。そうでなければ、単にsocket.ioでプレーンなhttpサーバを使うことができます。 – jfriend00

答えて

2

あなたはnpmでsocket.ioをインストールしていることを確認し、同様socket.ioクライアントを持っています。あなたがCDN上socket.ioクライアントを使用できることを確認するために:

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 

をサーバ側では、socket.ioはappインスタンスをブートストラップではなくhttp必要があります。 は、例えば:クライアント側では、彼らはちょうどこのvar socket = io('http://localhost');のようにlocalhostに指すように、彼らはポート80を使用

var http = require('http'); 
var socket = require('socket.io'); 
function server()... 
app = http.createServer(server); 
io = socket(app); 
app.listen(80); 

デフォルト。他のポートを使用する場合は、ioインスタンシエーションでも変更する必要があります。 例えば

var socket = io('http://localhost:1337')

+0

ありがとう!これはうまくいった。私がまだ抱えている唯一の問題は、ポートを80から1337に変更する方法を理解しようとしていることですが、私はそれをオンラインのどこかで見つけることができると確信しています。私が必要とするのは、localtunnel.meを使って他の人にローカルポートをホストできるようにするためです。おそらく許可エラーのために80でこれをやり遂げるようには思われません。私はおそらく周りを見回し、これを修正することができますが、これはなぜこれが動作しているのか、それを修正する方法を知るのに役立ちます。 – Programah

+1

また、io = socket();何らかの理由で動作しませんでしたが、socket = io();した:P – Programah

関連する問題