日常学习(2016年6月3日)–大卫–中

日常学习(2016年6月3日)

今天,我正在使用计算机的麦克风和socket.io库将用户连接到本地服务器,以进行一个小项目。 以下是我一直在努力的一些事情,以及最终解决该问题的方法,尽管这些绝不是“最佳”解决方案。

  1. 在server.on之后设置套接字连接

为了在本地机器上设置服务器,我使用了express和socket.io:

  var socketio = require('socket.io'); 
var express = require('express');
var app = express();
var path = require('path');
var http = require('http')
var服务器= http.createServer()
var PORT = 3000;
  var io = socketio(服务器) 
  io.on('connection',function(socket){ 
console.log(“新客户:”,socket.id);
})
  server.on('request',app); 
  server.listen(PORT,function(){ 
console.log('服务器监听PORT',PORT);
})

但是,这样做似乎会触发发送多个响应的错误:

 错误:发送标头后无法设置标头。 

如果我在server.on调用之后初始化套接字,那么一切似乎都可以更好地工作:

  var socketio = require('socket.io'); 
var express = require('express');
var app = express();
var path = require('path');
var http = require('http')
var服务器= http.createServer()
var PORT = 3000;
  server.on('request',app); 
  server.listen(PORT,function(){ 
console.log('服务器监听PORT',PORT);
})
  var io = socketio(服务器) 
  io.on('connection',function(socket){ 
console.log(“新客户:”,socket.id);
})

另外,如果我在服务器初始化期间将Express应用程序传递到服务器,则一切似乎也可以顺利进行:

  var socketio = require('socket.io'); 
var express = require('express');
var app = express();
var path = require('path');
var http = require('http')
var server = http.createServer(app)//在此处传递应用
var PORT = 3000;
  var io = socketio(服务器) 
  server.listen(PORT,function(){ 
console.log('服务器监听PORT',PORT);
})
  io.on('connection',function(socket){ 
console.log(“新客户:”,socket.id);
})

2.将套接字ID传递回客户端

我想跟踪连接到服务器的每个客户端,一种方法是,每当客户端发出请求时,客户端就将服务器的套接字ID传递给服务器。 但是,让套接字在套接字连接时发出带有套接字ID的信号似乎不起作用:

  io.on('connection',function(socket){ 
console.log(“新客户:”,socket.id); //服务器知道套接字ID
  socket.emit(“ SocketID”,socket.id);  //服务器将ID发送回客户端,但客户端从未收到 
})

我确实找到了一种可行的回旋方法,涉及到在客户端连接时让客户端向服务器广播附加信号,然后将套接字ID发送回客户端:

  //客户端代码 
  var socket = io(window.location.origin); 
  socket.on('connect',function(){ 
console.log(“您已连接!”);
socket.emit('whoami');
})
  //服务器端代码 
  io.on('connection',function(socket){ 
console.log(“新客户:”,socket.id);
  socket.on('whoami',function(){ 
socket.emit(“ socketid”,socket.id); //被客户接收
});
  }) 

3.学习使用Web Audio API

Web Audio API是处理Web音频(输入和输出)的非常强大且有用的工具。 这是我第一次使用它,因此要进行所有设置都非常困难。 具体来说,我使用了volume-meter.js库来检测进入笔记本电脑麦克风的声音的音量。

从较高的角度看,该过程很容易理解,尽管引擎盖下可能还有很多其他事情:

  window.AudioContext = window.AudioContext ||  window.webkitAudioContext;  //设置AudioContext 
  var foo = new AudioContext();  //创建新的AudioContext 
 尝试{ 
navigator.getUserMedia(//请求音频输入
{
“音频”:{
“强制性”:{
“ googEchoCancellation”:“ false”,
“ googAutoGainControl”:“ false”,
“ googNoiseSuppression”:“ false”,
“ googHighpassFilter”:“ false”
},
“可选的”: []
},
},getStream,didtGetStream);
}抓住(e){
alert('getUserMedia抛出异常:'+ e);
}
 函数didtGetStream(){ 
alert('流生成失败。'); //如果失败则输出
}
  var mediaStreamSource = null; 
 函数getStream(stream){ 
mediaStreamSource = foo.createMediaStreamSource(stream); //创建MediaStreamSource
var meter = createAudioMeter(foo); //创建音频计
mediaStreamSource.connect(meter); //将仪表连接到MediaStreamSource
}