go websockets eof

Я пытаюсь сделать простой переадресатор команд для подключения моего домашнего компьютера к серверу, которым я владею, чтобы я мог передавать команды на мой сервер, а мой домашний ПК получал их. Эти команды - простая пауза/возобновление для моего загрузчика. Моя схема такова: на сервере я запускаю экземпляр концентратора, который создает окно для передачи команд и окно бэкенда для передачи этих команд на мой ПК. Я связываю эти два "окна" каналом, они запускают сервер. Когда клиент подключается и отправляет сообщение на концентратор, оно передается по каналу в окно бэкенда, а затем в настоящий бэкенд (на моем домашнем ПК). Когда backend отвечает на окно backend на хабе, хаб печатает результат обратно клиенту.

При таком подходе только первое сообщение проходит и работает с моим загрузчиком. Мне приходится переподключать backend с моего домашнего ПК к концентратору каждый раз, когда я получаю сообщение, чтобы заставить его работать должным образом. Я не думаю, что это правильный способ с websockets, поэтому я здесь. После одного успешного запроса (когда бэкенд завершает свою работу и отвечает результатом), он зацикливается навсегда с ошибкой EOF.

Важные части кода:

Если вы поместите исходник в GOPATH (я разрабатываю его для tip-версии go для поддержки современных websockets), то для компиляции: go build gosab/cmd, для запуска:

  • ./cmd -mode="hub" hub
  • ./cmd -mode="backend" --address="localhost:8082" backend

Для передачи сообщений в хаб используйте этот javascript:

var s = new WebSocket("ws://localhost:8082")
s.send("1 5")

Так как же мне с этим работать? Являются ли каналы хорошим способом связи между двумя различными запросами?

6
задан farnoy 16 February 2012 в 19:00
поделиться