如何在jQuery中使用套接字?

如何在jQuery中使用套接字?,jquery,sockets,Jquery,Sockets,这是一个非常复杂和利基的问题,所以可能没有一个现实的答案,我需要做什么 我的任务是使用无线接收器,它需要的不仅仅是jQuery的get/post功能 由于跨域问题,此jQuery get在Aptana IDE中创建的Adobe Air应用程序中执行 它必须是AdobeAIR,因为web服务器不会靠近无线接收器最终连接的位置 所以我需要一个应用程序,可以与2Know文艺复兴无线接收器通信 我已经创建了一个应用程序,可以很好地进行一些通信。以下是到目前为止我可以做的步骤 连接到接收器 查看有多少手持

这是一个非常复杂和利基的问题,所以可能没有一个现实的答案,我需要做什么

我的任务是使用无线接收器,它需要的不仅仅是jQuery的get/post功能

由于跨域问题,此jQuery get在Aptana IDE中创建的Adobe Air应用程序中执行

它必须是AdobeAIR,因为web服务器不会靠近无线接收器最终连接的位置

所以我需要一个应用程序,可以与2Know文艺复兴无线接收器通信

我已经创建了一个应用程序,可以很好地进行一些通信。以下是到目前为止我可以做的步骤

  • 连接到接收器
  • 查看有多少手持设备连接到接收器
  • 然后应该有一些来回的通信,这在ajax中并不容易,至少据我所知
  • 这是我一直在使用的代码,这是关于第24个版本,这是我得到的

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>2Know Wireless Communicator</title>
    </head>
    <body>
    <h1>Current Status/Prograess</h1>
    
    <!--- step 1. is server connected --->
    <div id="server_status" style="font-size:12px;"></div>
    
    <!--- step 2. list number of devices connected --->
    <div id="device_count" style="font-size:12px;"></div>
    <div id="device_info" style="font-size:12px;"></div>
    
    <!--- step 3.a Service Handler handler status / csh = Service Handler handler --->
    <div id="csh_status" style="font-size:12px;"></div>
    
    <!--- step 3.b disconnect status handler handler of many handlers --->
    <div id="dis_status" style="font-size:12px;"></div>
    
    <!--- step 4. test sending a question to a device --->
    <div id="post_results" style="font-size:12px;"></div>
    
    <!-- load the local jquery -->
    <script type="text/javascript" src="lib/jquery/jquery-1.4.2.js"></script>
    <script type="text/javascript" src="lib/jquery/json_parse.js"></script>
    <script type="text/javascript" src="lib/jquery/jparse.min.js"></script>
    <script type="text/javascript" src="lib/air/AIRAliases.js"></script>
    <script type="text/javascript" src="lib/air/AIRIntrospector.js" />
    <!-- Include service monitor framework -->
    <script type="application/x-shockwave-flash" src="lib/air/servicemonitor.swf"></script>
    
    
    <script type="text/javascript">
    function watch_connection() {
        // do ajax get
        $.ajax({
            type: "GET",
            datatype: "xml",
            url: "http://my_ip_address:port/Services/ConnectServiceHandler",
            success: function(response){
                $('#post_results').html(response);
            },
            error:function (xhr, ajaxOptions, thrownError){
                $('#post_results').html("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
            }
        });
        setTimeout(function(){watch_connection;}, 100);
    }
    
    function disconnect_service_handler() {
    
        // step 1. create xml document of data to send
        var xml_string = '<data><disconnect_handler service="64"/></data>';
    
        // step 2. post this to the registration service
        $.ajax({
            type: "POST",
            datatype: "xml",
            url:"http://my_ip_address:port/Services/DisconnectServiceHandler",
            data: xml_string,
            beforeSend: function(xhr){
                   xhr.withCredentials = true;
            },
            timeout: (2 * 1000),
            success: function(response){
    
                // parse the response
                $(response).find("status").each(function() {
                    // get the status code
                    var disconnect_status = $(this).attr('code');
    
                    if (disconnect_status == 200) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [200 Disconnected]');
    
                        // call connection using new guid
                        var my_guid = guid();
                        connect_service_handler(my_guid);
                    }
    
                    if (disconnect_status == 304) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [304 No handler found]');
                    }
    
    
                    if (disconnect_status == 400) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [400 Bad Request]');
                    }
    
                    if (disconnect_status == 401) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [401 Not Found]');
                    }
    
                    if (disconnect_status == 500) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [500 Internal Server Failure]');
                    }
    
                    if (disconnect_status == 501) {
                        // change status bar message
                        $('#dis_status').html('Disconnecting: [503 Service Unavailable]');
                    }
    
    
                });
    
    
            },
            error:function (xhr, ajaxOptions, thrownError){
                $('#dis_status').html('Disconnecting: [Disconnect Failure]');
            }
    
        });
    }
    function S4() {
       return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    }
    function guid() {
       return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
    }
    function connect_service_handler(my_guid) {
    
        // step 1. create xml document of data to send
        var xml_string = '<data><connect_handler service="64"><application id="'+my_guid+'" name="MikesBigEar" /></connect_handler></data>';
    
        // step 2. post this to the registration service
        $.ajax({
            type: "POST",
            datatype: "xml",
            url:"http://my_ip_address:port/Services/ConnectServiceHandler",
            data: xml_string,
            beforeSend: function(xhr){
                   xhr.withCredentials = true;
            },
            timeout: (2 * 1000),
            success: function(response){
    
                // parse the response
                $(response).find("status").each(function() {
    
                    // get the status code
                    var connection_status = $(this).attr('code');
    
                    if (connection_status == 200) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [200 Connected]');
                        // keep connection open keep socket alive
                        // sends http request to us via post
                        // sends the incoming request id and device address back to make sure it goes to the correct device
                        // ask for user id or user authentication
                        // for user authentication can either use built-in user authentication or ask a question
                        // http 1.1 keep alive header
                        $('#post_results').html('Attempting to check for next piece of data...');
                        watch_connection();
                    }
    
                    if (connection_status == 303) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [303 The handler is assigned to another application]');
                        var my_guid = guid();
                        connect_service_handler(my_guid);
                    }
    
                    if (connection_status == 400) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [400 Bad Request]');
                        disconnect_service_handler();
                    }
    
                    if (connection_status == 401) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [401 Not Found]');
                        disconnect_service_handler();
                    }
    
                    if (connection_status == 500) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [500 Internal Server Failure]');
                        disconnect_service_handler();
                    }
    
                    if (connection_status == 501) {
                        // change status bar message
                        $('#csh_status').html('Service Handler: [501 Service Unavailable]');
                        disconnect_service_handler();
                    }
    
    
                });
    
                // pass the xml to the textarea
                // $('#process').val('ConnectServiceHandler');
                // $('#show_errors_here').val(response);
    
            },
            error:function (xhr, ajaxOptions, thrownError){
                $('#csh_status').html('Service Handler: [Connection Failure]');
                // alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
                // alert("responseText: "+xhr.responseText);
                // alert(xhr.status);
                // alert(thrownError);
            }
    
        });
    
        // set timed re-check and store it
        // setTimeout(function(){connect_service_handler(my_guid);}, 8000);
    
    
    }
    
    function get_device_count(my_guid) {
        // get the total number of devices
    
        // default receiver status
        var receiver_status = '';
    
    
        $('#device_count').html('Device Count: [Checking...]');
        $('#device_info').html('');
    
        // get the wireless receiver status via ajax xml
        $.ajax({
            type: "GET",
            url:"http://my_ip_address:port/Services/GetDevices",
            beforeSend: function(xhr){
                   xhr.withCredentials = true;
            },
            timeout: (2 * 1000),
            success: function(response){
    
                $(response).find("status").each(function() {
                    // get the status code
                    var receiver_status = $(this).attr('code');
    
                    if (receiver_status == 200) {
                        // change status bar message
                        $('#device_count').html('Device Count: [200 Connected]');
                    }
    
                    if (receiver_status == 400) {
                        // change status bar message
                        $('#device_count').html('Device Count: [400 Bad Request]');
                    }
    
                    if (receiver_status == 401) {
                        // change status bar message
                        $('#device_count').html('Device Count: [401 Not Found]');
                    }
    
                    if (receiver_status == 500) {
                        // change status bar message
                        $('#device_count').html('Device Count: [500 Internal Server Failure]');
                    }
    
                    if (receiver_status == 501) {
                        // change status bar message
                        $('#device_count').html('Device Count: [501 Service Unavailable]');
                    }
    
    
                });
    
                var device_count = 0;
    
                // add to div
                $('#device_info').append('<ul style="font-size:10px;">');
    
                $(response).find("device").each(function() {
    
                    // get each property
                    var device_status = $(this).attr('status');
                    var short_address = $(this).attr('short_address');
                    var mac_address = $(this).attr('mac_address');
                    var pan_id = $(this).attr('pan_id');
                    var type = $(this).attr('type');
    
                    device_count = device_count + 1;
    
                    // get session data
                    $(this).find("session").each(function() {
    
                        // get session data
                        var created_date = $(this).attr('date');
                        var created_time = $(this).attr('time');
    
                    });
    
                    $('#device_info').append('<li style="list-style:none;">Device #'+device_count+'<ul>');
    
                    // add list item
                    $('#device_info').append('<li> Mac Address: ['+mac_address+']</li>');
                    $('#device_info').append('<li> Short Address: ['+short_address+']</li>');
                    $('#device_info').append('<li> Pan ID: ['+pan_id+']</li>');
    
                    $('#device_info').append('</ul></li><br/>');
    
                    // send request to this device
                    // post_live_activity(mac_address,my_guid);
    
    
    
                });
    
                // end list
                $('#device_info').append('</ul>');
    
                if (device_count === 0) {
                    $('#device_count').html('Device Count: [0 Devices Found]');
                } else if (device_count > 0) {
                    $('#device_count').html('Device Count: [' + device_count + ' Devices Found]');
                }
    
    
            },
            error:function (xhr, ajaxOptions, thrownError){
                $('#device_count').html('Device Count: [Connection Failure]');
                // alert(xhr.status);
                // alert(thrownError);
            }
        });
    
        // set timed re-check and store it
        setTimeout(function(){get_device_count(my_guid);}, 13000);
    }
    function get_server_status(my_guid) {
    
        // default receiver status
        var receiver_status = '';
    
        // get the Renaissance Wireless Server via ajax xml
        $.ajax({
            type: "GET",
            url:"http://my_ip_address:port/Services/GetAccessPoints",
            timeout: (2 * 1000),
            beforeSend: function(xhr){
                   xhr.withCredentials = true;
            },
            success: function(response){
    
                $(response).find("status").each(function() {
                    // get the status code
                    var receiver_status = $(this).attr('code');
    
                    if (receiver_status == 200) {
    
                        // change status bar message
                        $('#server_status').html('Renaissance Wireless Server: [200 Connected]');
    
                        // step 2. get device count
                        get_device_count(my_guid);
    
                        // step 3.part 1 get the guid to be used as the application id
                        // var my_guid = guid();
    
                        // step 3. part 2 connect to a service handler whatever that means
                        connect_service_handler(my_guid);
    
                    }
    
                    if (receiver_status == 400) {
    
                        // change status bar message
                        $('#server_status').html('Renaissance Wireless Server: [400 Bad Request]');
    
                        // set timed re-check and store it
                        setTimeout(function(){get_server_status(my_guid);}, 12300);
    
                    }
    
                    if (receiver_status == 401) {
    
                        // change status bar message
                        $('#server_status').html('Renaissance Wireless Server: [401 Not Found]');
    
                        // set timed re-check and store it
                        setTimeout(function(){get_server_status(my_guid);}, 12300);
                    }
    
                    if (receiver_status == 500) {
    
                        // change status bar message
                        $('#server_status').html('Renaissance Wireless Server: [500 Internal Server Failure]');
    
                        // set timed re-check and store it
                        setTimeout(function(){get_server_status(my_guid);}, 12300);
    
                    }
    
                    if (receiver_status == 501) {
    
                        // change status bar message
                        $('#server_status').html('Renaissance Wireless Server: [503 Service Unavailable]');
    
                        // set timed re-check and store it
                        setTimeout(function(){get_server_status(my_guid);}, 12300);
    
                    }
                    // pass the xml to the textarea
                    // $('#process').val('GetAccessPoints');
                    // $('#show_errors_here').val(response);
    
                });
    
            },
            error:function (xhr, ajaxOptions, thrownError){
                $('#server_status').html('Renaissance Wireless Server: [Connection Failure]');
                // alert(xhr.status);
                // alert(thrownError);
            }
        });
    
        // set timed re-check and store it
        // setTimeout(function(){get_server_status(my_guid);}, 12300);
    }
    
    $(document).ready(function() {
    
        // step 3.part 1 get the guid to be used as the application id
        var my_guid = guid();
    
        // step 1 validate
        get_server_status(my_guid);
    
        // step 2. get device count
        get_device_count();
    
        // step 3.part 1 get the guid to be used as the application id
        // var my_guid = guid();
    
        // step 3. part 2 connect to a service handler whatever that means
        // connect_service_handler(my_guid);
    
    
    });
    </script>
    </body>
    </html>
    
    
    2Know无线通讯器
    当前状态/进度
    函数监视_连接(){
    //ajax得到了什么
    $.ajax({
    键入:“获取”,
    数据类型:“xml”,
    url:“http://my_ip_address:port/Services/ConnectServiceHandler",
    成功:功能(响应){
    $('post#u results').html(回复);
    },
    错误:函数(xhr、ajaxOptions、thrownError){
    $(“#发布结果”).html(“readyState:+xhr.readyState+”\n状态:+xhr.status);
    }
    });
    setTimeout(函数(){watch_connection;},100);
    }
    函数断开连接\u服务\u处理程序(){
    //步骤1.创建要发送的数据的xml文档
    var xml_字符串=“”;
    //步骤2.将此信息发布到注册服务
    $.ajax({
    类型:“POST”,
    数据类型:“xml”,
    url:“http://my_ip_address:port/Services/DisconnectServiceHandler",
    数据:xml_字符串,
    发送前:函数(xhr){
    xhr.withCredentials=true;
    },
    超时:(2*1000),
    成功:功能(响应){
    //解析响应
    $(响应)。查找(“状态”)。每个(函数(){
    //获取状态代码
    var disconnect_status=$(this.attr('code');
    如果(断开连接状态==200){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[200 Disconnected]);
    //使用新guid呼叫连接
    var my_guid=guid();
    连接服务处理程序(我的guid);
    }
    如果(断开连接状态==304){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[304未找到处理程序]);
    }
    如果(断开连接状态==400){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[400错误请求]);
    }
    如果(断开连接状态==401){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[401 Not Found]”);
    }
    如果(断开连接状态==500){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[500内部服务器故障]);
    }
    如果(断开连接状态==501){
    //更改状态栏消息
    $('dis#u status').html('Disconnecting:[503服务不可用]);
    }
    });
    },
    错误:函数(xhr、ajaxOptions、thrownError){
    $('dis#u status').html('Disconnecting:[Disconnect Failure]');
    }
    });
    }
    函数S4(){
    返回((1+Math.random())*0x10000)| 0.toString(16)子字符串(1);
    }
    函数guid(){
    返回(S4()+S4()+“-”+S4()+“-”+S4()+“-”+S4()+“-”+S4()+“-”+S4()+S4()+S4());
    }
    函数连接服务处理程序(我的guid){
    //步骤1.创建要发送的数据的xml文档
    var xml_字符串=“”;
    //步骤2.将此信息发布到注册服务
    $.ajax({
    类型:“POST”,
    数据类型:“xml”,
    url:“http://my_ip_address:port/Services/ConnectServiceHandler",
    数据:xml_字符串,
    发送前:函数(xhr){
    xhr.withCredentials=true;
    },
    超时:(2*1000),
    成功:功能(响应){
    //解析响应
    $(响应)。查找(“状态”)。每个(函数(){
    //获取状态代码
    var connection_status=$(this.attr('code');
    如果(连接状态==200){
    //更改状态栏消息
    $('csh_status').html('Service Handler:[200 Connected]');
    //保持连接打开保持套接字活动
    //通过post向我们发送http请求
    //将传入的请求id和设备地址发送回,以确保它转到正确的设备
    //请求用户id或用户身份验证
    //对于用户身份验证,可以使用内置的用户身份验证,也可以询问问题
    //http 1.1保持活动标头
    $(“#post_results').html('正在尝试检查下一段数据…');
    观察连接();
    }
    如果(连接状态==303){
    //更改状态栏消息
    $('csh_status').html('Service Handler:[303该处理程序已分配给另一个应用程序]);
    var my_guid=guid();
    连接服务处理程序(我的guid);
    }
    如果(连接状态==400){
    //更改状态栏消息
    $('csh_status').html('Service Handler:[400错误请求]);
    断开_服务_处理程序();