现在我有一个运行 Cassandra 的 ec2 实例和一个简单的 websocket 服务器。我想知道这是否是制作“实时”聊天应用程序的正确方法。有什么我想念的吗?
客户端连接websocket,插入消息,消息存入数据库,入库成功后发送给用户。
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['127.0.0.1'],
localDataCenter: 'datacenter1' });
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3000 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
//Insert message into Cassandra DB
//Send message to other users if record to database with a consistency
level of one is successful
//Then send messages to users connected to the websocket in chatroom
});
编辑:我似乎也找不到任何关于此类内容的教程,所以如果您有任何链接,请分享
最佳答案
您的问题没有简单的答案,也不是很清楚是关于什么的。 “如果数据库中的记录成功”在像 Cassandra 这样的分布式系统的上下文中并不是一件容易的事,因为您可以拥有许多数据副本。它始终是数据一致性和可用性之间的权衡。首先你需要了解 CAP theorem在使用 Cassandra 之前。
我不确定聊天应用程序是否需要强一致性,但拥有 2 或 3 个数据副本会很好。如果是 cassandra,你可以选择更合适的 consistency level .我认为对于聊天消息,它可以是 ONE
或 ANY
,在这种情况下,Csaandra 将提供最终的一致性,但与更“强大”的相比,您将拥有更多的可用性和性能一致性级别。
关于database - 使用 Cassandra 创建实时应用程序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045422/