Краткое описание проблемы
Я пытаюсь объединить простое приложение чата socket.io в собственное приложение для запуска на Android 2.2 и более поздних версиях с помощью phonegap.
веб-клиент socket.io -> сервер socket.io работает
У меня есть простой сервер, работающий с socket.io, который успешно взаимодействует с клиентом socket.io при его запуске в веб-браузере.
мобильный клиент socket.io в мобильном браузере -> сервер socket.io работает
Обратите внимание, что , поскольку веб-сокеты не поддерживаются на Android 2.2 , по умолчанию используется опрос xhr, примеры сообщений с сервера при подключении через веб-браузер на Android 2.2.
[root@webnode-2 nodechat]# node server.js
info - socket.io started
debug - client authorized
info - handshake authorized 6036976111002307981
debug - setting request GET /socket.io/1/xhr-polling/6036976111002307981?t=1332184313758
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 6036976111002307981
6036976111002307981
debug - setting request GET /socket.io/1/xhr-polling/6036976111002307981?t=1332184313839
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 5:::{"name":"message","args":["Welcome stranger!"]}
debug - set close timeout for client 6036976111002307981
debug - discarding transport
debug - cleared close timeout for client 6036976111002307981
debug - setting request GET /socket.io/1/xhr-polling/6036976111002307981?t=1332184313928
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 6036976111002307981
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client 6036976111002307981
debug - xhr-polling closed due to exceeded duration
debug - setting request GET /socket.io/1/xhr-polling/6036976111002307981?t=1332184334139
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 6036976111002307981
debug - xhr-polling received data packet 5:::{"name":"connect_friends","args":[{"user_id":"2","friends_list":[1,2,3,4,5,6,7,8,9,10]}]}</p>
<hr>
<p>REGISTER USER</p>
<hr>
<p>{ user_id: '2',
friends_list: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] }
10
assigned user_id: 2 to socket 6036976111002307981
socket.io из phonegap -> сервер socket.io не работает
Однако когда я пытаюсь соединиться с socket.io в phonegap, соединение открывается, но быстро закрывается
В журнале Android есть ошибка о том, что требуется flash player> v10, но в моем телефоне есть flash player v 11.1
03-19 11:38:46.847: I/PhoneGapLog(18469): Found log level DEBUG
03-19 11:38:46.847: I/PhoneGapLog(18469): Changing log level to DEBUG(3)
03-19 11:38:46.847: D/DroidGap(18469): DroidGap.onCreate()
03-19 11:38:46.847: D/DroidGap(18469): DroidGap.loadUrl(file:///android_asset/www/index.html)
03-19 11:38:46.847: D/DroidGap(18469): DroidGap: url=file:///android_asset/www/index.html baseUrl=file:///android_asset/www/
03-19 11:38:46.847: D/DroidGap(18469): DroidGap.init()
03-19 11:38:46.941: D/dalvikvm(18469): GC_FOR_MALLOC freed 6234 objects / 618952 bytes in 68ms
03-19 11:38:46.968: D/SoftKeyboardDetect(18469): Ignore this event
03-19 11:38:47.007: D/SoftKeyboardDetect(18469): Ignore this event
03-19 11:38:47.058: D/SoftKeyboardDetect(18469): Ignore this event</p>
<p><b><i>03-19 11:38:47.241: D/PhoneGapLog(18469): Flash Player >= 10.0.0 is required.
03-19 11:38:47.241: D/PhoneGapLog(18469): file:///android_asset/www/js/socket.io/socket.io.js: Line 2622 : Flash Player >= 10.0.0 is required.
03-19 11:38:47.241: E/Web Console(18469): Flash Player >= 10.0.0 is required. at file:///android_asset/www/js/socket.io/socket.io.js:2622</i></b></p>
<p>03-19 11:38:47.796: D/PhoneGapLog(18469): Receiving Welcome stranger!
03-19 11:38:47.796: D/PhoneGapLog(18469): file:///android_asset/www/index.html: Line 8 : Receiving Welcome stranger!
03-19 11:38:47.796: I/Web Console(18469): Receiving Welcome stranger! at file:///android_asset/www/index.html:8
03-19 11:39:07.007: E/DroidGap(18469): DroidGap: TIMEOUT ERROR! - calling webViewClient
03-19 11:39:07.007: D/Cordova(18469): DroidGap: GapViewClient.onReceivedError: Error code=-6 Description=The connection to the server was unsuccessful. URL=file:///android_asset/www/index.html
03-19 11:39:07.167: D/SoftKeyboardDetect(18469): Ignore this event
03-19 11:39:16.323: D/dalvikvm(18469): GC_EXPLICIT freed 6130 objects / 505920 bytes in 156ms
Журнал событий на сервере
[root@webnode-2 nodechat]# node server.js
info - socket.io started
debug - client authorized
info - handshake authorized 1009349893764580916
debug - setting request GET /socket.io/1/xhr-polling/1009349893764580916?t=1332182327502
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 1009349893764580916
debug - setting request GET /socket.io/1/xhr-polling/1009349893764580916?t=1332182327602
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 5:::{"name":"message","args":["Welcome stranger!"]}
debug - set close timeout for client 1009349893764580916
debug - discarding transport
debug - cleared close timeout for client 1009349893764580916
debug - setting request GET /socket.io/1/xhr-polling/1009349893764580916?t=1332182327802
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 1009349893764580916
debug - clearing poll timeout
info - transport end
debug - set close timeout for client 1009349893764580916
debug - cleared close timeout for client 1009349893764580916</p>
<hr>
<p>DISCONNECTED EVENT</p>
<hr>
<p>debug - discarding transport
debug - client authorized
info - handshake authorized 2044675477593417130
debug - setting request GET /socket.io/1/xhr-polling/2044675477593417130?t=1332182347938
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 2044675477593417130
debug - setting request GET /socket.io/1/xhr-polling/2044675477593417130?t=1332182348112
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 5:::{"name":"message","args":["Welcome stranger!"]}
debug - set close timeout for client 2044675477593417130
debug - discarding transport
debug - cleared close timeout for client 2044675477593417130
debug - setting request GET /socket.io/1/xhr-polling/2044675477593417130?t=1332182348308
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 2044675477593417130
debug - clearing poll timeout
info - transport end
debug - set close timeout for client 2044675477593417130
debug - cleared close timeout for client 2044675477593417130</p>
<hr>
<p>DISCONNECTED EVENT</p>
<hr>
<p>debug - discarding transport
Сообщение с сервера "Добро пожаловать, незнакомец!" получил по телефону. На телефоне появилось диалоговое окно с сообщением об ошибке приложения. Соединение с сервером было неудачным. (Файл: ///android_asset/www/index.html)
клиент пробелов в телефоне -> сервер socket.io не работает
Затем я прочитал, что веб-сокеты еще не поддерживаются в phonegap, и наткнулся на этот проект для поддержки WebSocket в приложениях Android Phonegap . Когда я запустил его и попытался подключиться к серверу socket.io, я получил ошибку
[root@webnode-2 nodechat]# node server.js
info - socket.io started
debug - destroying non-socket.io upgrade
, что, по моему мнению, связано с попыткой подключения к серверу socket.io с помощью веб-сокетов без использования клиента socket.io js . Я протестировал его только с сервером node.js, и он работал
Вопросы
- Есть ли способ сообщить socket.io о веб-сокете, созданном с помощью Поддержка WebSocket в приложениях Android Phonegap ?
- Почему время ожидания опроса xhr истекло?