Openlaszlo WebSocket не работает
Я попытался подключить свое приложение openlaszlo к WebSocket Api. Но это не сработало. Я использовал JavaScript в файле lzx. тот же javascript работает как обычный HTML-файл. Но это не работает в файле lzx.
<class name="SpecialButton" extends="button" onclick="changeLabel()">
<attribute name="changeToLabel" value="Clicked!" type="string"/>
<method name="changeLabel">
var newLabel = openFunction(this.changeToLabel);
//this.setAttribute('text', newLabel);
openSocket();
</method>
</class>
<script> <![CDATA[
var webSocket;
var messages = "Hello Web Socket";
function openFunction(arg){
return arg+" done";
}
function openSocket() {
// Ensures only one connection is open at a time
if (webSocket !== undefined
&& webSocket.readyState !== WebSocket.CLOSED) {
writeResponse("WebSocket is already opened.");
return;
}
// Create a new instance of the websocket
webSocket = new WebSocket("ws://localhost:8888/HelloSocket/echo");
//Debug.debug(WebSocket.CLOSED);
/**
* Binds functions to the listeners for the websocket.
*/
webSocket.onopen = function(event) {
// For reasons I can't determine, onopen gets called twice
// and the first time event.data is undefined.
// Leave a comment if you know the answer.
if (event.data === undefined)
return;
writeResponse(event.data);
};
webSocket.onmessage = function(event) {
writeResponse(event.data);
};
webSocket.onclose = function(event) {
writeResponse("Connection closed");
};
}
/**
* Sends the value of the text input to the server
*/
function send() {
var text = "Hello World!!";
webSocket.send(text);
}
function closeSocket() {
webSocket.close();
}
function writeResponse(textmessage) {
//result.setAttribute("text", textmessage);
this.setAttribute('text', textmessage);
}
]]>
</script>
<simplelayout axis="y" spacing="10"/>
<SpecialButton>Not clicked</SpecialButton>
<SpecialButton changeToLabel="Thank You!">Please click me!</SpecialButton>
Результат отладки приведен ниже:
ERROR @helloClass.lzx#72: reference to undefined variable 'webSocket'
ERROR @helloClass.lzx#78: call to undefined function 'WebSocket'
ERROR @helloClass.lzx#83: reference to undefined variable 'webSocket'
ERROR @helloClass.lzx#83: undefined object does not have a property 'onopen'
ERROR @helloClass.lzx#93: reference to undefined variable 'webSocket'
ERROR @helloClass.lzx#93: undefined object does not have a property 'onmessage'
ERROR @helloClass.lzx#97: reference to undefined variable 'webSocket'
ERROR @helloClass.lzx#97: undefined object does not have a property 'onclose'
WebSocket Api не поддерживается в lzx или openlaszlo? Пожалуйста, предложите мне, как я буду подключать двухстороннюю связь в реальном времени. Заранее спасибо.
1 ответ
Openlaszlo поддерживает две формы общения в реальном времени:
- RTMP через red5
- Сокеты XML через flash.net.XMLSocket
Например, вот класс, который использует XMLSocket:
<class name="ClientSocket" extends="node">
<attribute name="host" />
<attribute name="port" />
<attribute name='xml_socket'/>
<handler name="oninit">
xml_socket = new XMLSocket();
// connect the socket here:
xml_socket.connect(host,port);
</handler>
<handler name='onData' reference='xml_socket' args='messageXML'>
<![CDATA[
ExternalInterface.call(‘handleServerMessageReceived',messageXML);
]]>
</handler>
</class>
и пример этого:
<canvas>
<ClientSocket id='serverPushSocket' host='localhost' port='20340'/>
</canvas>
Рекомендации