SSE 服务端代码
时间: 2023-07-02 13:20:12 浏览: 136
以下是使用 Node.js 实现 SSE 服务端的简单示例代码:
```javascript
const http = require('http');
http.createServer((req, res) => {
// 设置响应头,表明使用了 SSE 协议
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
// 向客户端发送数据
setInterval(() => {
const data = `data: ${new Date().toLocaleTimeString()}\n\n`;
res.write(data);
}, 1000);
}).listen(8080);
```
运行上述代码后,可以使用浏览器访问 http://localhost:8080 ,即可看到页面不断地输出当前时间。该示例中,我们使用 setInterval 定时向客户端发送数据,客户端通过监听 `message` 事件并处理数据来实现实时更新页面的效果。
相关问题
php sse服务端推送消息到指定客户端
在 PHP SSE 技术中,服务器可以向所有连接的客户端推送消息,也可以向指定的客户端推送消息。下面是一种向指定客户端推送消息的方法:
1. 在客户端连接服务端时,将客户端的唯一标识符记录下来,可以存放在一个数组中。
2. 当需要向某个客户端推送消息时,可以根据其唯一标识符找到对应的客户端连接,向其发送消息即可。
下面是示例代码:
```php
// 记录客户端连接
$clients = array();
// 创建 SSE 服务器
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
while (true) {
// 向所有客户端发送消息
echo "data: Hello, world!\n\n";
ob_flush();
flush();
// 检查客户端是否连接,如果不再连接,则从数组中删除
foreach ($clients as $id => $client) {
if (feof($client)) {
unset($clients[$id]);
}
}
// 等待一段时间,再次发送消息
sleep(1);
}
// 接收客户端连接
if (isset($_GET['id'])) {
$id = $_GET['id'];
$clients[$id] = fopen('php://input', 'r');
}
```
在上面的示例代码中,我们记录了所有连接到服务器的客户端,并在循环中向所有客户端发送消息。当客户端连接时,我们将其唯一标识符存放在 `$clients` 数组中。当需要向某个客户端发送消息时,可以根据其唯一标识符找到对应的客户端连接。
SSE java服务端
以下是使用 Java 实现 SSE 服务端的简单示例代码:
```java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/sse")
public class SSEServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应头,表明使用了 SSE 协议
response.setContentType("text/event-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
PrintWriter out = response.getWriter();
// 向客户端发送数据
while (true) {
String data = "data: " + new Date().toString() + "\n\n";
out.write(data);
out.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
运行上述代码后,可以使用浏览器访问 http://localhost:8080/sse ,即可看到页面不断地输出当前时间。该示例中,我们使用 while 循环定时向客户端发送数据,客户端通过监听 `message` 事件并处理数据来实现实时更新页面的效果。注意,由于 SSE 是基于 HTTP 协议的,因此需要使用 Servlet 容器(如 Tomcat)来运行该示例。
阅读全文