2012-02-07 2 views
11

Я хотел бы запустить сервер WebSocket с рабочей роли в Azure.Запуск Fleck (или любой) Сервер веб-сервера на Windows Azure

Это нормально работает на эмуляторе, но при первом запуске сервера сокетов появляется запрос брандмауэра Windows.

Мне интересно, сможет ли кто-нибудь узнать, как преодолеть проблемы с подключением к розеткам на Azure.

реализация Моего сокет сервер: OnStart

var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/"); 

server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information"); 
     _sockets.Add(socket); 
    }; 
}); 
.... etc 

Реализация клиента:

var socket = new WebSocket("ws://theappname.cloudapp.net:8080"); 

socket.onopen = function() { 
    status.html("Connection Opened"); 
}; 
socket.onclose = function() { 
    status.html("Connection Closed"); 
} 

Изменение статуса в closed через несколько секунд после загрузки страницы.


Моя конечная точка для роли работника ниже:

WebSocket Input http 8080 <Not Set>


я сейчас попытался связать с внутренним IP-адрес, используя следующие:

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();


РЕШЕНИЕ

Ради кого-то напротив этого при осуществлении WebSockets на лазури;

  1. Ваш брандмауэр, вероятно, откажется от вашего соединения, если не на порту 80 или 8080, поэтому создайте для него отдельное развертывание.

  2. Конечная точка должна быть установлена ​​в TCP, а не в HTTP, для правильного создания правил брандмауэра. (См изображения)

Endpoint Configuration

+2

Просто ради испытания, почему бы вам не изменить свой входной вывод с протокола «http» на «tcp». И явно установите локальный порт на 8080 (что в вашем случае - ). Также вы должны иметь в виду, что Windows Azure Load Balancer убьет любое соединение, которое простаивает более 60 секунд. – astaykov

+0

@astaykov - Ваш комментарий привел к решению, пожалуйста, напишите ниже, чтобы я мог + заверить вас. Благодарю. – f0x

+0

@astaykov У вас есть полная реализация?Я пытаюсь заставить мое работать и никогда не делал этого раньше. – Yecats

ответ

8

Просто ради испытания, почему бы вам не изменить свой входной вывод с протокола «http» на «tcp». И явно установите локальный порт на 8080 (что в вашем случае). Также вы должны иметь в виду, что Windows Azure Load Balancer убьет любое соединение, которое простаивает более 60 секунд, поэтому вы можете реализовать какое-то «пинговое» решение, чтобы поддерживать соединение открытым.

+0

Спасибо за дополнительные комментарии о том, что подключение открыто, рассматривал нечто похожее. – f0x

+0

Я рад, что смог помочь! – astaykov

+0

Не поддерживается ли соединение, отправляющее PING по протоколу? –

0

Вы можете посмотреть на этом вводном видео, Стив Маркс (@smarx) вместе взятый на how to run node.js on Windows Azure.

+0

Спасибо, я много работал с node.js и socket.io; к сожалению, это не тот контекст, который мне представлен. – f0x

Смежные вопросы