Socket.io和Express ERR_SSL_VERSION_OR_CIPHER_MISMATCH

时间:2018-04-27 15:10:21

标签: node.js express https socket.io github-pages

我的代码托管在GitHub页面上。我试图通过IP将客户端连接到我的计算机的Node.JS服务器,但连接显示错误using UnityEngine; using System.Collections; using System.Linq; using UnityEngine.XR.WSA.WebCam; public class VideoCaptureExample : MonoBehaviour { static readonly float MaxRecordingTime = 5.0f; VideoCapture m_VideoCapture = null; float m_stopRecordingTimer = float.MaxValue; // Use this for initialization void Start() { StartVideoCaptureTest(); Debug.Log("Start"); } void Update() { if (m_VideoCapture == null || !m_VideoCapture.IsRecording) { return; } if (Time.time > m_stopRecordingTimer) { m_VideoCapture.StopRecordingAsync(OnStoppedRecordingVideo); } } void StartVideoCaptureTest() { Resolution cameraResolution = VideoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); Debug.Log(cameraResolution); float cameraFramerate = VideoCapture.GetSupportedFrameRatesForResolution(cameraResolution).OrderByDescending((fps) => fps).First(); Debug.Log(cameraFramerate); VideoCapture.CreateAsync(false, delegate (VideoCapture videoCapture) { Debug.Log("NULL"); if (videoCapture != null) { m_VideoCapture = videoCapture; Debug.Log("Created VideoCapture Instance!"); CameraParameters cameraParameters = new CameraParameters(); cameraParameters.hologramOpacity = 0.0f; cameraParameters.frameRate = cameraFramerate; cameraParameters.cameraResolutionWidth = cameraResolution.width; cameraParameters.cameraResolutionHeight = cameraResolution.height; cameraParameters.pixelFormat = CapturePixelFormat.BGRA32; m_VideoCapture.StartVideoModeAsync(cameraParameters, VideoCapture.AudioState.ApplicationAndMicAudio, OnStartedVideoCaptureMode); } else { Debug.LogError("Failed to create VideoCapture Instance!"); } }); } void OnStartedVideoCaptureMode(VideoCapture.VideoCaptureResult result) { Debug.Log("Started Video Capture Mode!"); string timeStamp = Time.time.ToString().Replace(".", "").Replace(":", ""); string filename = string.Format("TestVideo_{0}.mp4", timeStamp); string filepath = System.IO.Path.Combine(Application.persistentDataPath, filename); filepath = filepath.Replace("/", @"\"); m_VideoCapture.StartRecordingAsync(filepath, OnStartedRecordingVideo); } void OnStoppedVideoCaptureMode(VideoCapture.VideoCaptureResult result) { Debug.Log("Stopped Video Capture Mode!"); } void OnStartedRecordingVideo(VideoCapture.VideoCaptureResult result) { Debug.Log("Started Recording Video!"); m_stopRecordingTimer = Time.time + MaxRecordingTime; } void OnStoppedRecordingVideo(VideoCapture.VideoCaptureResult result) { Debug.Log("Stopped Recording Video!"); m_VideoCapture.StopVideoModeAsync(OnStoppedVideoCaptureMode); } }

那是我的服务器代码:

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

这是客户方:

var app = require('express')();
var server = require('https').createServer(app);
var io = require('socket.io')(server);

app.set('port', process.env.PORT || 8080);
app.set('host', process.env.HOST || '0.0.0.0');

server.listen(app.get('port'), app.get('host'), () => {
  console.log("Express server listening IP: " + app.get('host'));
});

io.on('connection', socket => {
    socket.on('sayHi', data => {
        console.log(data.message);
    });
});

1 个答案:

答案 0 :(得分:2)

因为您使用HTTPS运行SocketIO Server而发生该错误。

所以我们有两种方法来解决这个问题:

  1. require('https')更改为require('http')
  2. 按照此示例源代码

    在createServer中导入证书SSL文件
    const privateKey = fs.readFileSync(process.env.PRIVATE_KEY, 'utf8')
    const certificate = fs.readFileSync(process.env.CERTIFICATE, 'utf8')
    const credentials = {
        key: privateKey, 
        cert: certificate, 
        passphrase: process.env.PASSPHRASE
    }
    var server = require('https').createServer(credentials, app);
    
  3. 希望这可以帮到你!