我試圖建立的WebSockets,以便將消息發送到AWS,所以後來我可以處理該消息,並在雲中發送一些有效載荷到其他資源,並提供客戶定製的響應部分。安裝AWS ElasticBeanstalk的使用WebSockets
但是,我不能得到那個工作。
主要目標是通過WSS://
將消息發送到AWS,與WS://
第一種方式(如果可能的話),這取決於負載的內容,它應返回一個自定義的響應。如果不需要進一步操作,請關閉連接。
我試過了張貼的建議here,here和here。但是,無論是我的知識缺乏有關負載平衡,的WebSockets,TCP和HTTP是不是讓我看到的解決方案件漏掉的,我所做的一切錯誤或兩者兼而有之。
至於現在,我有一個彈性魔豆例如項目結構是這樣的:
+ nodejs-v1
|--+ .ebextensions
| |--- socketupgrade.config
|
|--+ .elasticbeasntalk
| |--- config.yaml
|
|--- .gitignore
|--- app.js
|--- cron.yaml
|--- index.html
|--- package.json
彈性魔豆環境和應用程序是標準的創建,並且還確保平衡器應用,不經典,因此應用程序負載平衡器可以使用Websockets開箱即用許多源代碼es和文檔狀態。
它使用端口80上的HTTP進行設置。粘滯性啓用了一天。
這裏是正在使用的代碼:
app.js
:
'use strict';
const express = require('express');
const socketIO = require('socket.io');
const path = require('path');
const PORT = process.env.PORT || 3000;
const INDEX = path.join(__dirname, 'index.html');
const serber = express()
.use((req, res) => res.sendFile(INDEX))
.listen(PORT,() => console.log(`Listening on ${ PORT }`));
const io = socketIO(serber);
io.on('connection', (socket) => {
console.log('Client connected');
socket.on('disconnect',() => console.log('Client disconnected'));
});
setInterval(() => io.emit('time', new Date().toTimeString()), 1000);
index.html
:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
});
</script>
package.json
:
{
"name": "Elastic-Beanstalk-Sample-App",
"version": "0.0.1",
"private": true,
"dependencies": {
"express":"*",
"socket.io":"*"
},
"scripts": {
"start": "node app.js"
}
}
.ebextensions/socketupgrade.config
:
container_commands:
enable_websockets:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
我只得到504
,502
,有時候,在毫無意義的嘗試隨機調整配置時,它給了我200,而在其他的企圖,沒有協議的錯誤,但像斷線的東西消息..
我感謝您的時間和關注閱讀這個絕望的話題!任何暗示也將不勝感激......只是,任何事情...... T-T
感謝您的時間和關注!
親切的問候, 喬恩·M.
更新1
我會開始引用@RickBaker:
就個人而言,我還能做什麼首先是從刪除負載平衡器等式。 >如果您的ec2實例擁有公共IP,請進入您的安全組並確保>您的應用聽到的正確端口向公衆開放。看看你是否至少可以在沒有負載平衡器複雜化的情況下工作。 - >裏克·貝克22小時前
改變從負載均衡,自動縮放環境類型到單實例環境的彈性魔豆環境的應用程序的縮放功能。重要的是要知道,我改變了它從彈性魔豆網頁控制檯,而不是直接從EC2,因爲我認爲它可以打破彈性魔豆環境中的應用作爲一個整體。
無論如何,改變了它的環境後,環境的應用程序完成後重新設置,改變和部署如下:
index.html
:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
每樣東西上運行,通過網頁呼叫測試後到索引頁面。而從節點日誌顯示壽命:
-------------------------------------
/var/log/nodejs/nodejs.log
-------------------------------------
Listening on 8081
Client connected
Client disconnected
Client connected
然後,我開始爲服務器搜索到服務器設置程序中this文檔和 然後開始挖了一下,以連接到服務器WSS
。
因此,主要目標是建立並維持從AWS EB應用程序到另一個接受WSS
連接的服務器的會話。應該負責穩定和維護該連接,因此當網絡服務器發生事件時,應用程序可以發送對所發生事件請求的響應。
所以然後我讀了this topic,並意識到NodeJS
-socket.io
方法將不會工作的基礎上閱讀的職位。所以,我現在不知道該怎麼做。 ( ' - ')
AWS EB可以設置環境Python
與WSGI
,但吉茲...不知道下一步該怎麼做。如果可能的話,我會嘗試連接WS
,如果不是,則嘗試連接WSS
,看看是否有問題。所以我會在有結果後立即更新,無論是否存在。
喬恩全身而退。
雖然不是你的問題的直接解決方案。你的方法似乎相當複雜。任何原因,你不能只使用某種類型的API端點來實現這一點,或者你使用套接字,因爲這些可能是長時間運行的進程? –
Hi @RickBaker!原因是設備將根據發送的有效負載消息接收特定的自定義響應,這是以字節爲單位。該消息通過網絡服務器服務進行路由和處理,可以通過多種方式與應用程序服務器通信。似乎符合要求的選項是'HTTP(S)'Push或'Websockets'。所以我們給websockets一個鏡頭。我們的主要目標是首先通過'WS'(如果可能的話(由於** AWS **安全措施)''request'''response','WSS'(理想情況下)在我們獲得'WS'後工作(如果可能,再次)。 – GJntN
我陷入了困境。因此,在AWS內部運行的服務可以在通過websocket連接之外直接連接到端口嗎?意思是你從你的websocket請求來自哪裏的地方進行遠程登錄? –