github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

tmm1 / jssocket

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 34
    • 2
  • Source
  • Commits
  • Network (2)
  • Issues (0)
  • Downloads (0)
  • Wiki (1)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Branches (1)
    • master ✓
  • Tags (0)
Sending Request…
Enable Donations

Pledgie Donations

Once activated, we'll place the following badge in your repository's detail box:
Pledgie_example
This service is courtesy of Pledgie.

generic javascript socket API — Read more

  cancel

http://github.com/tmm1/jsSocket

  cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

Ruby License 
tmm1 (author)
Sun Jul 26 21:48:10 -0700 2009
commit  6842e31476ec4c51b6cd595058a663207e52a382
tree    289a153e279763538877787342f98064e588d599
parent  c0e8a8794f916cf0a08ccd09061ab2244a580945
jssocket /
name age
history
message
file README Loading commit data...
directory examples/
directory flash/ Wed Jan 21 18:39:37 -0800 2009 fixed sizedMode in jsSocket2 (socket.readUTF() ... [tmm1]
directory js/
README
jsSocket: generic javascript socket API
  (c) 2008 Aman Gupta (tmm1)

  http://github.com/tmm1/jsSocket


WHAT IS IT

  jsSocket uses Flash's XMLSocket to expose a simple socket API to javascript


REQUIREMENTS
  
  jquery, jquery.media, jsonStringify and jsSocket.swf
  mtasc (http://mtasc.org) or haxe (http://haxe.org) to re-compile the swfs from source


FEATURES

  * multiple sockets on the same page
  * keepalive to keep connections open
  * automatic reconnect
  * status callback for custom connecting/disconnected/reconnecting UI
  * customizable logger for debugging


WHY FLASH

  * high market penetration
      (according to a meebo study, more people had flash installed than javascript enabled)
  * single TCP connection (instead of one ajax connection per outgoing packet)
  * lower bandwidth usage and latency than long-polling


CAVEATS

  * extra initial TCP connection required for security policy
  * packets must be delimited by null bytes
  * html and binary content must be base64 encoded


USAGE

  - Specify the path to jsSocket.swf
  
      jsSocket.swf = '/flash/jsSocket.swf'


  - Connect to site.com on port 1234
  
      var socket = jsSocket()
      socket.connect('site.com', 1234)
      socket.send('hello world')


  - Connect to document.location.hostname on port 443
  
      var socket = jsSocket({ port: 443 })


  - Install socket with default port and connect manually after setting data callback
  
      var socket = jsSocket({ port: 443, autoconnect: false })
      socket.onData = function(data){ alert(data) }
      socket.connect()


  - Hook into connected/disconnected/data events
  
      var socket = jsSocket({
        onOpen:  function()    { alert('connected') },
        onData:  function(data){ alert('got data: ' + data) },
        onClose: function()    { alert('disconnected') }
      })


  - Disable keepalive pings and auto-reconnect
  
      var socket = jsSocket({ keepalive: false, autoreconnect: false })
      socket.connect('site.com', 1234)
  

  - Send custom keepalive packets every minute
    
      var socket = jsSocket()
      socket.keepalive = function(){ socket.send('ping') }
  

  - Track the status of a socket connection
    
      var socket = jsSocket({ port: 443 })
      socket.onStatus = function(type, val){
        switch(type){
          case 'connecting':   // connecting to the server
            break

          case 'connected':    // connected
            break

          case 'disconnected': // disconnected
            break
        
          case 'waiting':      // waiting to reconnect in val seconds
            break

          case 'failed':       // attempted max reconnects
            break
        }
      }


  - Debug jsSocket
  
      var socket = jsSocket({ debug: true })
      socket.logger = console.log     // log to firebug
      socket.logger = function(arg){  // log to a div
        if(!$('#logger'))
          $('<div/>').attr('id', 'logger').appendTo('body')

        $('#logger').append(
          $('<p/>').text(arg.toString())
        )
      }


OTHER RESOURCES

  Alex MacCaw's Juggernaut: http://juggernaut.rubyforge.org
  jssockets (uses Flex/Flash9's RemotingSocket): http://code.google.com/p/jssockets
  XMLSocket bridge: http://www.devpro.it/xmlsocket/
  FlashSocket: http://ionelmc.wordpress.com/2008/11/29/flash-socket-bridge-with-haxe/
  socketBridge: http://matthaynes.net/blog/2008/07/17/socketbridge-flash-javascript-socket-bridge/


LICENSE

  Licensed under the Ruby License (http://www.ruby-lang.org/en/LICENSE.txt).
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server