herokuで使用しようとするrequire("socket.io");
と、「モジュールsocket.ioが見つかりません」というメッセージが表示されて失敗します。
ローカルのnode.jsサーバーでも同じことが正常に実行されているため、セットアップに問題があると思います。
何を変更する必要がありますか?
杉のHerokuはWebSocketをサポートしていません
とにかく、socket.ioを使用できます
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku
PaaSプロバイダーを変更する必要があります。HerokuはWebSocketをサポートしていません。nodejitsuはサポートWebSocketで知られています。
socket.io
また、 package.json依存関係リストに追加するのを忘れている可能性があります。
package.jsonは次のように変更されました
"dependencies": {
"async": "0.1.18",
"ejs": "0.4.3",
"express": "2.4.6",
"faceplate": "0.0.4",
"socket.io": "latest" },
そして、サーバーサイドコードは次のとおりです。
var port=process.env.PORT || 3000;
var http=require('http');
var app=http.createServer(function(req,res){
res.write("server listening to port:"+port);
res.end();
}).listen(port);
socket=require("socket.io");
io=socket.listen(app);
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
io.sockets.on("connection",function(socket){
console.log("new connection");
socket.on("eventA",function(data){
io.sockets.emit("eventB",data);
});
});
チャームのように働く!!!
このプロジェクトのwikiページによると、socket.IOのトランスポートオプションを(10)秒の期間でxhr-pollingに変更する必要があります。
websocketトランスポートはベータ状態のHerokuで動作しています。あなたはそれを有効にすることができますheroku labs:enable websockets -a YOUR_APP_NAME
これらはsocket.io関連の問題の解決策です
私は働くことを願っています
=============あなたのindex.jsファイル======================
(ここのポートは8000です)
const express = require("express")
var app = express();
const http = require('http')
var server = http.createServer(app);
const port = process.env.PORT || 8000
server.listen(port,()=>
{
console.log("Listening at port => "+port)
});
var io = require('socket.io')(server, {
cors: {
origin: '*',
}
});
const cors = require("cors")
app.use(cors())
=============client.jsファイル======================
ここのポートは8080です
const socket = io.connect('https://localhost:8080/')
=============あなたのindex.htmlファイル======================
ここのポートは8080です
<script defer src="https://localhost:8080/socket.io/socket.io.js">
</script>
「server.jsまたはindex.js」ポートは「client.js」ポートとは異なる必要があることに注意してください(これは重要です)
(index.htmlとclient.js)ポートは同じである必要があります
socket.ioを操作するときは、常に「http」を使用する必要があります(上記のコードを参照)
Uは、より多くのリソースを持つことができるため、corsを含めない場合があります。corsherokuを使用しないと、一部の依存関係がherokuにインストールされないようになります(上記のコードを参照)。
「io」を「io.connect」に置き換えてみてください
const socket = io.connect('https:// localhost:8080 /')
HTMLの最後にタグを書き込む必要があります
「socket.io」に必要なこのコードを追加するのを忘れる可能性があります
それはあなたのhtmlファイルで必要です
「node_modules」と「package-lock.json」を削除し、cmdに「npmi」と書き込みます
これはpackage.jsonのスクリプトに含まれている必要があります
"start": "node index.js"、
私はnodemonについて話していません、ここで単純なノードを使用してください
バージョンが問題を引き起こしている可能性があります。すべての「devDependencies」を「package.json」の「dependencies」にコピーし、このようなバージョンに「*」を入れることで、問題を回避できます。
「依存関係」:{
"cors": "*"、
"特急": "*"、
"nodemon": "*"、
"socket.io": "*"
}、
"devDependencies":{}