# river **Repository Path**: mirrors_nicolasff/river ## Basic Information - **Project Name**: river - **Description**: A simple “comet” server in C, streaming data to web clients - **Primary Language**: Unknown - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-25 - **Last Updated**: 2025-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### COMPILE You need to fetch the http-parser submodule, by typing:
git submodule init
git submodule update
#### Run demo 1 - run `make clean all` 2 - run `./river` 3 - In a terminal, run:
curl -N -d "name=public-channel" "http://127.0.0.1:9271/subscribe"
The call to `/subscribe` is blocking. 4 - And then, in another terminal:
curl -d "name=public-channel&data=hello-world-of-comet" "http://127.0.0.1:9271/publish"
5 - The call to `/subscribe` returns, with the data published in the channel. ### Embed in an HTML page The following example considers the page to be at `example.com`, and the comet server at `river.example.com`. 1 - Add a reference to the `lib.js` script in your page:
	<script type="text/javascript" src="http://river.example.com/lib.js?domain=example.com"></script>
2 - Initialize the server:
	document.domain = "example.com";

	function onMsg(msg) {
		alert("received message: ", msg);
	}

	Comet.init(function() {
		var c = new Comet.Client();
		c.connect("public-channel", onMsg); // call onMsg upon reception of a message.
	});
3 - The `onMsg` function will now receive all messages published on `public-channel`. ### Notes * Parameters can be sent in GET or POST. * /subscribe takes 3 more (optional) parameters: * `keep`: Use HTTP streaming or close connection after every push (value=`0` or `1`, defaults to `1`) * `seq`: Stream messages from a the sequence number up. Example: If 1000 messages have been sent, `seq=990` will push 10 messages. * `callback`: function name for a JSONP callback. * The *tests* directory contains two benchmarking programs, `websocket` and `bench`. They can simulate large numbers of concurrent clients reading and writing messages. A single core can process more than 450,000 messages per second. ### Chat Demo A chat demo is available in the `chat-demo` directory. In order to use it, follow these steps: * Add the line `127.0.0.1 www.chat-demo.com river.chat-demo.com` to your `/etc/hosts` file. * Configure your web server to server the index.html file for `www.chat-demo.com`. On Apache2:
<VirtualHost *:80>
	ServerName www.chat-demo.com
	DocumentRoot /var/www/chat-demo.com
</VirtualHost>
* Restart Apache. * Start river. * Open `www.chat-demo.com` in your web browser. #### TODO * Test support for Flash’s `\0` in the WebSocket implementation. * More efficient channel deletion. * Remove dependency on dict.c in channels, use own HT.