Skip to content
websocket server for XPages runtime
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

README (pronounced Zockets IO, for XPages websockets) plugin adds support for browser based websockets in the XPages runtime.  
It leverages websocket libraries to easily scale to a large number of users.  This plugin replaces the websocket implementation 
found in the webshell-xpages-ext-lib.  Below is a list of the latest features available in as of 3.0.4-leak-fix

-New Features:
	Upgraded to netty 4.1.9

	Fixed leak on user collection. UserCleanup process wasn't working properly

	This build has not been tested on releases prior to FP8 as of 3.0.3 (FP8 Compatibility)

New Features:
	Upgraded netty to 4.1.12, upgraded apache commons jars where possible without breaking backward compatibility (some later releases do not run on java 6)

	Split the update site into two for server and designer as there is a compatibility problem with FP8 and locally installing DAS plugin
	Added class references instead of instances for static utility classes (nashorn does not support accessing static methods from instances)
	Removed hard coded path references in chat.nsf sample application.
-Breaking Changes:
	For any variables that are put into scope by the plugin alter your code to access correctly from nashorn script engine (e.g. bundleUtils.load changes to bundleUtils.static.load)
	Be sure to refactor any existing java scripts that attempt to access these classes in a non-static way
	See the bundled chat application for examples
	NOTE: reference to the "static" keyword will render as an error in DDE. You can safely ignore that error message
	This build has not been tested on releases prior to FP8 as of 3.0.2
-New Features include:
	textOnly (e.g. msg.onlyText = true;) flag sends only the text portion of the message to the target recipient(s)
	dataOnly (e.g. msg.onlyData = true;) flag sends just the data portion of the message to the target recipient(s)
	both of the above flags help to limit the payload size to the targets by removing message meta data
	DSAPI plugin project for Visual Studio for a very specific use case handling certificate based authentication (windows only for now)
	fix reload scripts to included intervaled scripts
	fixed null pointer in XocketsPhaseListener as of 3.0.1
-New Features include:
	A new event method to script against called onBeforeMessage (fires just before a message will be sent, used for filters, other validations)
	A new SocketMessage attribute called shortCircuit.  If set to true halts sending of message (for use with onBeforeMessage)
	Support for includes / use across multiple script libraries using for example:
		JavaScript external library refernces would be ///use lib1.ssjs, lib2.ssjs, lib3.ssjs
		Ruby's external references would be #///use lib1.rb, lib2.rb, lib3.rb
	Support for sharing application and session managed beans (note, only good for sharing state, do not try to perform notes operations)
	Additional utility objects are now available in script scope as well (e.b. b64Utils, strUtils, ioUtils, fileUtils etc)
	Group chat application will be available soon on OpenNTF that will demonstrate these new features.
	A new parameter to override the default character set when pulling in scripts (see WEBSOCKET_CHARSET=xxxx).
	 as of 3.0.0
-New Features include:
	URI Listeners (replaced Rhino SocketEventListeners)
	"Intervaled" Scripts to fire on a specific interval
	Support for the following scripting runtimes (Groovy, JRuby, Jython, BeanShell, Agents(LS and Java), and Rhino's JavaScript)
	Routing a message to a user on a specific page has been restored.  Was broken in prior release (e.g. /chat.nsf/chat.xsp/CN=admin admin/OU=...)
-Breaking Changes Introduced:
	Refactor any scripts that registered via addSocketEventListener methods to use the new methods for URI Listeners (see chat.nsf sample)
	A file extension must be used with the ssjs or file design elements (e.g. logger.ssjs, or as of 2.0.8
-New feature added to allow event observer scripts for all connected clients as of 2.0.7
-New feature added to allow a collection of messages to be sent in one call as of 2.0.6
-Fix applied for multiple targets in a message targeting URIs as of 2.0.5
-Updated the underlying Netty server to 4.1.1 due to security vulnerability in 4.1.0 as of 2.0.4
-Fixed issue with IE11 disconnecting after 30 seconds of inactivity
-Updated underlying Netty server to the final release of 4.1.0
-Fixed issue with remove-script command not working from console as of 2.0.3
-Fixed embedded client's max message size.  It now uses the WEBSOCKET_MAX_MSG_SIZE value from the server
-Fixed reload-scripts and show-scripts command line call from the console (last release I had disabled / removed accidentally)
-Added enhancement to allow multiple targets in a SocketMessage.  New attribute introduced "targets".  Use instead of "to" field when sending to multiple
-Added enhancement to allow multiple websocket connections per user based on URI. as of 2.0.2
-Enhanced to accomodate a simple proxy to allow the websocket server and Domino http server to run off of one port
-Setup to use Netty's tc-native SSL feature.  It uses OpenSSL to handle network encryption.  
I had to back-port the java code to 1.6 since and create a custom build.  
Currently the OpenSSL feature is windows only, Linux is supported, I just haven't had time to create the build.
-Code cleanup / refactoring as of 2.0.1
-Fixed a problem with the plugin importing to the designer client (indirect reference to unneeded plugin removed)
-Updated the logic for message durability to save an inbound message during the onMessage method instead of during the send.
-(NOT TESTED YET) Added native transport settings WEBSOCKET_NATIVE_TRANSPORT for Linux based systems only (reduces memory consumption and GC overhead)
-Refactored NettyTestClient to use main method invocation so the loaded websocket clients stay loaded throughout the entire test.
-Refactored some of the notes api java operations for performance (e.g. use unid instead of view lookup where possible)
-Updated Config object to be based off an interface for easier substitutions during testing.
-Updated some netty calls to reduce memory overhead and GC
-(NOT TESTED) Removed the XPage 9.0.1 plugin references.  This might allow the websocket plugin to function in 8.5.3 as of 2.0.0
-Use of Netty as the websocket/networking engine
-Increased scale (tested locally with 15k websocket connections / users)
-Granular control of threading, send / receive buffers to tweak performance of the server
-Configuration can be stored in a profile document, or notes.ini (both use name/value pairs)
-You will no longer be restricted to using the server's Id.  Any Id can be configured to integrate with the Domino server password no longer has to be empty (websocket server initializes with trusted session, then reverts to configured userId)
-Rhino embedded JavaScript clients can be registered and run under their own Ids as well (e.g. chatapp user)
-Added Origin based security patch to prohibit Cross-Site Websocket Hijacking (CSWSH) (you must configure allowed Origins e.g.,,
-Added security patch to make sure the logged in user has at least reader access to the nsf if the websocket url contains the nsf as part of its path. 
-Added LRU SystemCache reference available to your Rhino JavaScript libraries to share and persist data between SSJS library invocations (scoped to class, so be careful with your keys).

Please see for more detailed information
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.