2012-02-28 3 views
1

У меня проблема, когда я хочу попробовать технологию веб-сокетов в своем приложении. , но я хочу спросить о требовании веб-сокета.возможен на разных языках в сети?

1) Возможный я использую сервера с яваскриптом языка ехом socket.io

var io = require('socket.io').listen(3001); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', {hello: 'can you hear me'}); 
}); 

и клиентом, используя пример Java языка является socket.io.java я использую этот метод, чтобы получить сообщение от сервера

public void onMessage(JSONObject json, IOAcknowledge ack) { 
       Log.d("We received a message: " , json.toString()); 
      } 

с моим гнездом сервера

SocketIO socket = new SocketIO("http://127.0.0.1:3001/news"); 

2) является опорой для всей машины? или браузер? я новичок в веб-сокетов программирования, пожалуйста, помогите мне

спасибо за ответ ...

ответ

3

Да, вы можете создать сервер на любом языке, который вам нужен, но веб-сокеты не являются простым сокетом, они являются сокетами, которые «следуют» конкретному протоколу, поэтому убедитесь, что вы прочитали спецификацию этого протокола и внедрили его на вашем сервере, чтобы любой браузер смог установить соединение с ним.

И вы также можете написать клиент на любом языке, но если вы не используете javascript, я не понимаю, почему вы используете веб-сокеты вместо простого простого сокета. Но если вы хотите, просто взгляните на то, какие данные браузер отправляет на сервер веб-сокета и подражает им от вашего собственного клиента.

+0

Я использую javascript на клиенте, который успешно тестирует, я могу отправить запрашивать и получать ответ от сервера каждый раз ...когда я использовал другой язык в клиенте, у меня есть стек, я думаю, что мой код пропущен. – viyancs

+0

Возможно, потому, что вы не отправляете данные подтверждения от своего клиента, это то, что требуется протоколу веб-сокета. Когда вы используете Javascript, браузер делает это для вас под капотом, но если вы пишете своего клиента, вы должны сделать это сами. – Delta

+0

спасибо за ваш ответ, я решаю свою проблему, я отправляю рукопожатие на сервер, но я не справляюсь с этим, поэтому я не могу получить сообщение от клиента, просто дайте дескриптор, и я могу запустить свою программу отлично ...:) – viyancs

0

Sockets являются операционная система вещь. Вы можете использовать их с любым языком предоставления соответствующего интерфейса или клеевой код операционной system calls их реализации (например, в Linux: socket(2), connect(2), accept(2), listen(2), poll(2), recv(2) и т.д ...)

Но если вы новичок о сокетах, я настоятельно рекомендую прочитать хорошую книгу network programming.

+0

спасибо, я прочитаю, что .. :) – viyancs

+0

websockets - это не то же самое, что и обычные сокеты – mtsr

1

Чтобы уточнить ответ Delta, «websockets» - это вариант протокола HTTP, в котором клиент отправляет сообщение HTTP-запроса, сервер отправляет HTTP-ответ, а затем клиент и сервер используют все еще открытый TCP/IP-адрес соединение делать «другие вещи». Запрос и ответ содержат специальные заголовки, которые позволяют клиенту и серверу согласиться использовать соединение таким образом.

Для того, чтобы это сработало, клиенту и серверу необходимо понять хотя бы подмножество протокола HTTP, чтобы выполнить начальное «рукопожатие». Следовательно, вы, , не можете просто использовать клиент websocket для общения с простым сервером сокета ... или наоборот. (Если вы попытаетесь сделать это, оба конца будет видеть неожиданные вещи/ошибки протокола. И конец WebSocket должен незамедлительно закрыть свой конец соединения TCP/IP.)

Сказав, что клиент WebSocket и сервер websocket может быть реализован практически на любом современном языке программирования. (И то же самое относится к клиентам и серверам с открытым сокетом.)

+0

WebSockets - это не вариант HTTP. Он имеет начальное рукопожатие, поддерживающее HTTP, но после этого он больше похож на сырые сокеты (полный дуплекс, двунаправленный, постоянный). Дружественное рукопожатие HTTP упрощает запуск сервера WebSocket и веб-сервера на одном и том же порту (80, 443), что позволяет ему работать с существующей конфигурацией брандмауэра. – kanaka

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