Giter VIP home page Giter VIP logo

sockjs-client's People

Contributors

adpande avatar brycekahle avatar caoimhechaos avatar cgbystrom avatar davidben avatar dependabot[bot] avatar dvv avatar fafhrd91 avatar georgeosddev avatar glasser avatar harryadel avatar imkira avatar iyegoroff avatar johnmaguire avatar kkirsche avatar konklone avatar lpinca avatar lukasdrgon avatar majek avatar manuelstofer avatar mquandalle avatar nehresma avatar neizan93 avatar ngocdaothanh avatar pl avatar rstoyanchev avatar squaremo avatar syberkitten avatar watsoncj avatar yannickcr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sockjs-client's Issues

Syntax error under IE7

I systematically get a syntax error at line 1 under IE7 if I try to connect with sockjs client. To reproduce the issue, just try to create a new SockJS object like this:

<html>
<body>
  <script src="http://cdn.sockjs.org/sockjs-0.1.js"></script>
  <script>new SockJS('http://example.com/');</script>
</body>
</html>

CDN 'sockjs-0.1.js' serves a 0.2 client.

Our application links to http://cdn.sockjs.org/sockjs-0.1.js, which we expected to always serve the latest 0.1-compatible client.

Before today, it served 0.1.2. But now, it serves 0.1.2.82.g295b. It appears this is code identical to 0.2, but with a different version number slapped on. This is breaking connection to our production 0.1 servers.

Any chance version 0.1.2.82.g295b can be revoked so that sockjs-0.1.js again serves 0.1.2?

Connection not closed on IE9 (using: iframe-htmlfile) when the browser is closed

  1. Connect to the (code below) server on IE9
  2. Either refresh the page (50% repo) or close the tab/browser (50% repo)

Observe no disconnect message by the server. Is this expected? A WebSocket connection (chrome) doesn't show the same behavior.

This is the server I was running to test (a quick modification of the echo.js server)

/*global require: false */
/*global __dirname: false */
/*global console: false */

var http = require('http');
var sockjs = require('sockjs');
var node_static = require('node-static');

// 1. Echo sockjs server
function do_nothing() {}

var sockjs_opts = {
    sockjs_url: "http://cdn.sockjs.org/sockjs-0.2.min.js",
    log: do_nothing
};

var sockjs_echo = sockjs.createServer(sockjs_opts);

var connections = {};
var nextConnectionId = 0;

function publishMessage(message)
{
    var c;
    for (c in connections)
    {
        if (connections.hasOwnProperty(c))
        {
            var connection = connections[c];
            connection.write(message);
        }
    }
}

function sockjs_connection(connection)
{
    connections[nextConnectionId] = connection;
    var connectionId = nextConnectionId;

    nextConnectionId += 1;

    var message = 'Connection from ' + connection.remoteAddress + ':' + connection.remotePort + ' with id ' + connectionId;
    console.log(message);
    publishMessage(message);

    function connection_data(message)
    {
        publishMessage(message);
    }

    function connection_close()
    {
        var message = 'Disconnect from ' + connection.remoteAddress + ':' + connection.remotePort + ' with id ' + connectionId;
        console.log(message);
        delete connections[connectionId];
        publishMessage(message);
    }

    connection.on('data', connection_data);
    connection.on('close', connection_close);
}

sockjs_echo.on('connection', sockjs_connection);

// 2. Static files server
var static_directory = new node_static.Server(__dirname);

// 3. Usual http stuff
var server = http.createServer();

function static_directory_listener(req, res)
{
    static_directory.serve(req, res);
}

function upgrade_listener(req, res)
{
    res.end();
}

server.addListener('request', static_directory_listener);
server.addListener('upgrade', upgrade_listener);

sockjs_echo.installHandlers(server, {prefix: '/echo'});

console.log(' [*] Listening on 0.0.0.0:9999');
server.listen(9999, '0.0.0.0');

Don't rely on Javascript PRNG

Javascript random numbers aren't cryptographically secure. Security research proved that in some cases they are easy to predict. We should consider using a custom PRNG:

http://baagoe.com/en/RandomMusings/javascript/

Or at least use the "entropy" from "info" request as a seed.

trying to access a ws:// web socket server

Hi Majek & Co.

We've been hunting for a silver bullet. We have been developing an HTML 5 (Sencha Touch) application for 8 months. Use Web Socket to move JSON data to/from a SQL Server DB to the SQLite DB on devices. We have developed a server side listener based around the Alchemy websocket system. Which has served us well during the development phase and works well with our 'app' on iPhone/Pad .. having been wrapped by Phonegap etc.

We have been keeping a watch on possible solutions for Androids and have looked at a few. Over the past 24 hours we've made an attempt to get SockJS to work. It seems to us that it won't connect to our web socket server ... which has a ws:// address. ... like ws://222.333.555.111:50555

Are we wasting our time here? Does your client only talk to http:// addressed servers?

Would be interested to hear from you

Regards
Roger

outdated tests

Please, update sockjs-client/tests server. It uses outdated SockJS.createServer() call
--Vladimir

Remember last working transport

After we've done transport discovery, and the connection gets broken, we shouldn't do the discovery again.

Instead, if user wants to reconnect, we should just reuse previously detected transport.

"[object Object]"

Why you add object to empty string in send function ?
Object every time converts to "[object Object]".

that._transport.doSend(utils.quote('' + data));

Your test does not cover this situation, because each time they compare string and string, but not objects.
You need to replace "equal" and "equals" test function to "same".

Framing overhaul: Don't JSON-encode everything

Currently, which I do admit is a bit stupid, everything passed to SockJS is json-encoded. That should not be necessary, especially for protocols that can do binaries - websockets.

This will require a major change in the protocol.

It's also not going to be simple due to the fact that we may need some encoding for the iframe communication.

Emit 'heartbeat' event.

This is not defined by the spec, but it appears that exposing underlying 'heartbeat' events could be useful.

`send` shouldn't allow complex data types

Only strings, as per websockets spec.
(we don't do Blobs and typed arrays for now)

It should behave in a similar way to what chrome does - converting a value to a string. For example if you try sending a number 1 a string 1 will be send.

Does "protocols" not work at all?

var sockjs = new SockJS(url, protocols, options); <-- it looks like you can pass ['websockets'] to protocols, but that doesn't seem to be working.

In Sockjs 0.2 safari less likely to use native websockets

It looks that since 0.2 Safari is less likely to use websockets and more often falls back to xhr-polling.

This may be caused by general slowness of safari, or safari websockets implementation.

For example, connecting to host in the same network takes about 14ms in safari and 4ms in chrome.

`status` property on CloseEvent should be called `code`

I got that wrong. See sockjs-node bug. Spec clearly says:

Create an event that uses the CloseEvent interface, with the event name close, [...] whose wasClean attribute is initialized to true if the connection closed cleanly and false otherwise, whose code attribute is initialized to the WebSocket connection close code, and whose reason attribute is initialized to the WebSocket connection close reason decoded as UTF-8

AMD Compliance

Any chance this can be added? Should be as simple as

if typeof define is 'function'
   define SockJS
else
   window.SockJS = SockJS

Inline license

The license should be included verbatim at the top of the released file.

XHR requests linger on behind haproxy

@shripadk on IRC reports

 [22:55] <shripadk> while behind a proxy (ex: haproxy)
 [22:55] <shripadk> i notice that if the backend server crashes
 [22:55] <shripadk> xhr requests linger on
 [22:55] <shripadk> looks like there is no timeout set client side
 [22:56] <shripadk> doesn't that cause unnecessary load on the server?

iframe-htmlfile not stable in ie8

During the work on #52 we realized that iframe-htmlfile is not as stable as it should be. It seems to work okay in generic case, but it often fails to establish connection again after hitting F5/refresh.

To reproduce:

Htmlfile transport

In order to support JSESSIONID load balancing we need a streaming transport for IE that supports cookies. XDR is great, but it doesn't send cookies. Thus a need for something else - htmlfile for example.

robuster browser detection is needed

IE9 in standard document mode pretends to be a good browser. In particular, checking whether browser is IE with typeof _document.attachEvent === 'object' gives false negatives. This lead to subtle errors. To name one, jsonp-polling transport stops functioning correctly.

Proposed fix to jsonp-polling for IE is at #21

I believe we should determine browser once (then cache it in SockJS object) and more carefully

sockjs disable back button for opera

I hit the back button once, nothing happens, hit it again I am taken back to where I came from. Sometimes required more hits.

in cleanup function there's hack for ie: iframe.src = "about:blank";
it's lead to the interception of back button for opera.

Solution (in utils.createIframe cleanup):

  • iframe.src = "about:blank";
  • if(!-[1,]) iframe.src = "about:blank"; // (!-[1,]) for detect ie, could be something else

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.