Simple Twitter 挑戰功能
完成練習專案
Github
socket.io 伺服器檔案怎麼與express伺服器app.js拆開
起初在本地的時候,是在app.js之中載入寫好的socket.io伺服器
1 | ... |
然後在 server-socket.io.js 檔案中
1 | const { Server } = require('socket.io') |
在HTML需載入CDN引用
1 | <script src="https://cdn.socket.io/4.5.0/socket.io.min.js" |
在chatroom-socket-io.js 檔中連結io伺服器
1 | const userId = 1 |
但當開啟頁面時卻出現了連接不到伺服器的狀況
後來發現若在本地端這樣的架構,客戶端是經由 express伺服器Port:3000,再進到
io Server Port:3200,所以伺服器這邊會接不到客戶端,所以需要加上cros
server-socket.io.js 檔案中
1 | const { Server } = require('socket.io') |
第一次連不上的問題就解開了,可是到了要上傳heroku的時候,這樣寫死port的方式,heroku是沒辦法使用的。
所以看了heroku及socket.io官方文檔後,socket.io伺服器,若要掛勾express伺服器的話,必須先建立一個http伺服器,並將express當參數載入,之後再監聽這組http伺服器,而socket.io則是連向這組http伺服器。
所以按步驟需要做以下改動
在app.js檔案下,取消require
1 | ... |
在server-socket.io.js 檔案中
1 | const app = require('./app') // 載入app.js |
負責客戶端的chatroom-socket-io.js 中
1 | const userId = Number(chatroomMenu.dataset.userid) |
最後 package.json檔案腳本別忘了改成啟動server-socket.io.js
heroku的Procfile也要改成啟動server-socket.io.js