- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我刚刚使用 Socket 和 Nodejs 创建了聊天应用程序。
我显示了连接套接字的所有用户。在我的聊天框右侧
现在我需要用户天气的状态离线或在线
这是我使用的代码
index.html
<html>
<head>
<title>Socket.IO chat</title>
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<style>
#chat{
height:500px;
}
#contentWrap{
display: none;
}
#chatWrap{
float: left;
border: 1px #000 solid;
}
</style>
</head>
<body>
<div id="nickWrap">
<p>Enter a username:</p>
<p id="nickError"></p>
<form id="setNick">
<input size="35" id="nickname"></input>
<input type="submit"></input>
</form>
</div>
<div id="contentWrap">
<div id="chatWrap">
<div id="chat"></div>
<form id="send-message">
<input size="35" id="message"></input>
<input type="submit"></input>
</form>
</div>
<div id="users"></div>
</div>
<script>
var socket = io.connect();
// add username
$('#setNick').submit(function(e){
e.preventDefault();
socket.emit('new user', $('#nickname').val(), function(data){
if(data){
$('#nickWrap').hide();
$('#contentWrap').show();
} else{
$('#nickError').html('That username is already taken! Try again.');
}
});
$('#nickname').val('');
});
//list the user who connected
socket.on('usernames', function(data){
var html = '';
for(i=0; i < data.length; i++){
html += data[i] + '<br/>'
}
$('#users').html(html);
});
//send the message
$('#send-message').submit(function(e){
e.preventDefault();
socket.emit('send message', $('#message').val());
$('#message').val('');
});
socket.on('new message', function(data){
$('#chat').append('<b>' + data.nick + ': </b>' + data.msg + "<br/>");
});
</script>
</body>
</html>
app.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
nicknames = [];
app.get('/', function(req, res){
res.sendFile('index.html', { root: 'views'});
});
io.on('connection',function(socket){
//new user
socket.on('new user', function(data, callback){
if (nicknames.indexOf(data) != -1){
callback(false);
} else{
callback(true);
socket.nickname = data;
nicknames.push(socket.nickname);
console.log('user connected: ' + socket.nickname);
// io.emit('update_personal', nicknames + ': Online');
updateNicknames();
}
});
// update all user name
function updateNicknames(){
io.sockets.emit('usernames', nicknames);
}
// send message
socket.on('send message', function(data){
console.log('message: ' + {msg: data, nick: socket.nickname});
io.sockets.emit('new message', {msg: data, nick: socket.nickname});
});
//disconnected service
socket.on('disconnect', function(data){
console.log('user disconnected:' + socket.nickname )
if(!socket.nickname) return;
nicknames.splice(nicknames.indexOf(socket.nickname), 1);
updateNicknames();
});
});
http.listen(8087, function(){
console.log('listening on *:8087');
});
最佳答案
在你的app.js中:
通过以下方式更改您的昵称数组:
nicknames = {}
然后,对于“新用户”事件,我们需要稍微更改一下您的代码,如下所示:
if (nicknames.hasOwnProperty(data)){ //We check if data received is in nicknames array
callback(false);
} else{
callback(true);
socket.nickname = data;
nicknames[socket.nickname] = {online: true}; //Then we put an object with a variable online
console.log('user connected: ' + socket.nickname);
// io.emit('update_personal', nicknames + ': Online');
updateNicknames();
}
之后您需要修改断开连接事件:
socket.on('disconnect', function(data){
console.log('user disconnected:' + socket.nickname )
if(!socket.nickname) return;
nicknames[socket.nickname].online = false; //We dont splie nickname from array but change online state to false
updateNicknames();
});
在您的index.html中:
socket.on('usernames', function(data){
var html = '';
for (var nickname in data) //Foreach all nicknames received in data
{
var isNicknameOnline = data[nickname].online //Get the online state
//We test the online status
if (isNicknameOnline)
{
var status = '<font color=green><b>Yes</b></font>'
}
else
{
var status = '<font color=red><b>No</b></font>'
}
html += nickname + ' (Online: ' + status + ')<br/>' //print the status
}
$('#users').html(html);
});
然后运行你的app.js并刷新你的index.html。
请注意,您的离线列表不会保存到数据库或文本文件中,因此如果您重新启动 app.js,列表将为空。
关于node.js - Nodejs Socket 聊天应用程序 : Need to display the online and offline status,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35547689/
sls 离线命令停留在“离线:启动离线 SQS:本地/us-east-1”。 "serverless-offline": "^6.8.0", "serverless-offline-sqs": "4.
需要关于使用 redux 的大型 React Native 移动应用程序使用哪个库的建议? redux-离线 或 react-native-offline ? 我需要定期检查连接状态,根据连接状态呈现
我正在使用 Redux Offline在我的 Angular 项目中,现在我想在离线模式下启用取消发件箱中的项目。基本上,我只想过滤发件箱数组以删除我想要取消/修改的项目。 我的问题是它从我在顶级 r
我有一个只能离线工作的应用程序,但由于项目的设置方式,它需要互联网连接启动。我知道问题出在 spring.xml 中的 xsi:schemaLocation 属性,但对 Spring 不太了解,不知道
这就是一大堆错误。我已经安装了所有最新版本的Ffltter和Android Studio,还重新安装了Android SDK,并运行了ADB KILL-SERVER和ADB START-SERVER命
这就是一大堆错误。我已经安装了所有最新版本的Ffltter和Android Studio,还重新安装了Android SDK,并运行了ADB KILL-SERVER和ADB START-SERVER命
我在 Android 4.1 版本和代理后面。我已经设置了代理设置并且 sdk 下载工作正常。但是当我创建一个新项目时,它会抛出错误: Could not GET 'https://dl.google
我正在尝试与服务 worker 合作以缓存并遇到经过身份验证的调用的问题。我目前正在使用 https://css-tricks.com/serviceworker-for-offline/ ( htt
即使用户清除了缓存和 cookie,我也想让我的网站离线可用。有可能吗?我也在处理数据库。是否可以离线处理数据库? 最佳答案 用户可以存储 本地 的副本单例网页使用 Chrome(右键单击另存为),它
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 Improve this qu
我想从服务器下载 mp4 视频到我的 Android 设备。我希望这个视频以 block (加密)的形式存储,并且应该在视频播放时实时组合。如何着手解决这个问题。 最佳答案 对于这样的样本 publi
我一直在与社交集成和授权的 oauth 框架密切合作。我知道,像 Facebook 一样,Twitter 为其应用程序实现了一个 oauth Hook 。我的问题是,有没有办法让访问 token 永远
我在我这边使用 OpenStreetMap,但它可以通过他们的页面工作。我想知道是否可以下载一些 map 并使用本地服务器。到目前为止,我发现了这样的事情: http://openlayers.org
我正在考虑使用 Firebase 使用 PhoneGap 和 HTML5 应用程序缓存编写移动应用程序。 让我们假设每个用户都有一个 TODO 项目列表。如果应用程序在手机离线时启动,它是否能够从上一
我正在运行我的 nodejs 代码并且还安装了无服务器( npm i -g serverless )但是在使用命令 sls offline start --CacheInvalidations 运行它
这在以下情况下很有用: 服务器已关闭,客户端无法连接进行实时同步 没有互联网连接 用户不想上网,但想使用应用程序; 最佳答案 是的!这大部分已经在 Meteor 中实现了。 如果与服务器的连接丢失,客
在c#中没有互联网连接时,有没有办法获取计算机的mac地址?当我有连接时我能得到,但当我离线时我不能得到。但强烈要求我的工作需要 mac 地址。 我的在线代码; var macAddr =
我想在此处 map 中离线显示转弯导航。我也下载了 map 并将 MapEngine 设置为 false 以在离线模式下使用它,但在计算路线时返回 map 数据不足错误。如何在离线模式下使用此处 ma
该应用程序执行简单的注册(使用 FirebaseAuth、FirebaseUI 和 Google 登录)。认证时成功 , 我拿firebaseUser.userId并使用它从实时数据库中获取用户配置文
在运行 Flutter doctor 以查看为什么我的物理 LG G6 设备没有被拿起后,我发现“设备离线”。 我试过谷歌搜索,拔下并重新插入设备。 似乎没有任何效果。 这是什么意思?我的设备确实启用
我是一名优秀的程序员,十分优秀!