Intro
Большинство из вас, вероятно, спросят: «Почему?», Почему я делаю этот стек?Причина в том, что изначально я создал проект в Nuxtjs + expressjs.Но мой премьер-министр хотел, чтобы я не распространял свой исходный код нашему клиенту, поэтому я решил связать свой код в один .exe
файл с электроном.Я пытался использовать pkg
, но я не мог понять, как именно все скомпилировать.
Проблема
Проблема, с которой я сталкиваюсь с socket.io-client
, заключается в том, что я хочу иметь возможностьпереместите файл exe
на другой компьютер и подключите socket.io к серверу socket.io на этом компьютере динамически.Смена машин будет означать, что IP-адрес сервера будет другим, поэтому всякий раз, когда пользователь открывает веб-страницу для этого сервера, socket.io-client будет подключаться к соответствующему серверу.Это работает, когда я создаю приложение с моей текущей машины, но когда я перешел к, скажем, виртуальной машине, то вот ответ, который я получаю, когда открываю страницу:
ServiceUnavailableError: Response timeout
at IncomingMessage.<anonymous> (C:\Users\LIANG-~1\AppData\Local\Temp\nscAD47.tmp\app\resources\app.asar\node_modules\connect-timeout\index.js:84:8)
at IncomingMessage.emit (events.js:182:13)
at IncomingMessage.EventEmitter.emit (domain.js:442:20)
at Timeout._onTimeout (C:\Users\LIANG-~1\AppData\Local\Temp\nscAD47.tmp\app\resources\app.asar\node_modules\connect-timeout\index.js:49:11)
at ontimeout (timers.js:425:11)
at tryOnTimeout (timers.js:289:5)
at listOnTimeout (timers.js:252:5)
at Timer.processTimers (timers.js:212:10)
Для дальнейшего уточнения того, что я пытаюсьдопустим, допустим, я скомпилировал код на моей текущей машине с частным IP-адресом 192.168.0.104
(это работает отлично), я хочу переместить файл exe
на другую машину с частным IP-адресом 192.168.0.105
(доступ к веб-страницес этого сервера выдает вышеуказанную ошибку).
Используемая технология
Я использую технологию nuxt.js, созданную с помощью экспресс-шаблона , socket.io и vue-socket.io-extended .
Что я пробовал
Я пытался проверить reconnect
события или timeout
события,когда эти события запускаются, я звоню socket.connect(process.env.WS_URL)
, который не работает.Я считаю, что когда я упаковал electron app
, это делает данные плагина неизменными.Я не мог придумать, как изменить URL-адрес на адрес машины.
import Vue from 'vue'
import io from 'socket.io-client'
import VueSocketIO from 'vue-socket.io-extended'
export default ({ store }) => {
// process.env.WS_URL = 'http://192.168.0.12:3000'
const socket = io(process.env.WS_URL, { transports: 'websocket' })
socket.on('timeout', () => {
socket.connect(process.env.WS_URL)
})
Vue.use(VueSocketIO, io(process.env.WS_URL, { transports: 'websocket' }), { store })
}
Что у меня есть сейчас
Я создал плагин socket.io для nuxtjs
, чтобывнедрить в мое приложение, плагин выглядит следующим образом:
import Vue from 'vue'
import io from 'socket.io-client'
import VueSocketIO from 'vue-socket.io-extended'
export default ({ store }) => {
// process.env.WS_URL = 'http://192.168.0.12:3000'
Vue.use(VueSocketIO, io(process.env.WS_URL, { transports: 'websocket' }), { store })
}
Я ожидаю, что socket.io-client
подключится к правильному частному IP-адресу, где расположен файл exe
.Но Request Timeout
получено, хотя при выводе process.env.WS_URL
фактически является новым адресом.
EDIT: После дальнейшего тестирования кажется, что плагин socket.io
исправлен после процесса сборки.Таким образом, изменение process.env.WS_URL
не будет иметь никакого эффекта.Есть ли способ изменить URL для socket.io даже после завершения сборки nuxtjs?